2012-06-06 5 views
5

क्या एक GUID या उलंग कुंजी प्रभाव Redis डीबी प्रदर्शन का उपयोग कर रहा है?GUID (या इसी तरह) का उपयोग Redis में प्रदर्शन जुर्माना है?

समान: Does name length impact performance in Redis?

+0

यह लिंक प्रदर्शन बेंचमार्क है और स्वीकार किए जाते हैं जवाब महत्वपूर्ण नहीं कहते हैं, "http://stackoverflow.com/questions/6320739/does-name-length:

इसके अलावा, प्रलेखन बहुत बड़ी चाबी के लिए हैशिंग कार्यों का उपयोग करने के लिए पता चलता है -इम्पैक्ट-प्रदर्शन – ozz

उत्तर

3

रेडिस सभी चाबियों को स्टोर करने के लिए हैश रणनीति का उपयोग करता है, प्रत्येक कुंजी हैश फ़ंक्शन का उपयोग करके संग्रहीत होती है। कुंजी के बारे में सभी Redis डीबी peformance इस समारोह में गिरते हैं - या कुछ संबंधित।

मूल कुंजी भी विभिन्न कुंजी के बीच भविष्य colisions यह पता लगाने की संग्रहीत किया जाता है, और हाँ बड़ा कुंजी स्मृति संभाल पर प्रभाव और संबंधित क्षेत्रों के सभी हो सकता है: स्मृति विखंडन, कैश हिट/छूट जाए, आदि ...

+1

यदि कोई मुझसे पूछता है तो मैं इसे http://stackoverflow.com/a/6373068/501254 के रूप में उत्तर देता हूं। लेकिन किसी ने परीक्षण किया है http://stackoverflow.com/a/6322977/501254 और यह दिलचस्प लगता है। – ozz

+0

यह उत्तर भ्रामक है, जैसा कि उपरोक्त टिप्पणी में उल्लिखित @ozz है, यहां तक ​​कि 300+ चार कुंजी प्रदर्शन को प्रभावित नहीं करती हैं। –

1

मैं GUIDs के साथ दो मुद्दों के बारे में सोच सकते हैं:

वे अनुक्रमिक नहीं कर रहे हैं

मैं Redis के बारे में यकीन नहीं है, लेकिन कई डेटाबेस (SQL सर्वर, MongoDB) प्राथमिक कुंजी मान कुछ हद तक अनुक्रमिक होने पर सूचकांक (अधिक) अधिक कुशलता से कर सकते हैं।

शायद रेडिस समान है?

वैकल्पिक GUID पीढ़ी एल्गोरिदम हैं जो इस समस्या के लिए अनुक्रमिक GUID उत्पन्न करते हैं, उदा।

http://www.developmentalmadness.com/archive/2010/10/13/sequential-guid-algorithm-ndash-improving-the-algorithm.aspx

या एसक्यूएल सर्वर के Sequential GUID

वे बड़े हैं

अब अपने प्रमुख है, और अधिक स्मृति यह सूचकांक स्टोर करने के लिए ले जाता है। एक GUID 128 बिट्स है। कई (अधिकांश) डेटाबेस में, कोई भी 64-बिट या 32-बिट कुंजी का उपयोग कर सकता है। एक GUID का उपयोग करना जहां 32-बिट पूर्णांक का अर्थ होगा, आप सूचकांक के लिए 4x स्मृति का उपयोग करते हैं। चूंकि कई डेटाबेस में भौतिक स्मृति से बहुत अधिक सूचकांक होते हैं, जो प्रदर्शन पर नाटकीय प्रभाव डाल सकते हैं।

+0

धन्यवाद एरिक एक टिप्पणी के लिए। लेकिन रेडिस डीबी के पास इतनी अलग वास्तुकला है और मुझे थोड़ा और शोध मिला है। सबसे अच्छा संबंध – ozz

+1

डाउनवोट के लिए खेद है लेकिन उसका सवाल रेडिस के लिए बहुत विशिष्ट था। अच्छा जवाब अगर उसका सवाल REDIS शामिल नहीं किया गया :-) – schmoopy

+0

@schmoopy: एक डाउनवोट उचित नहीं है। मैंने * गलत जानकारी प्रदान नहीं की *।मैंने आशा व्यक्त की कि यह सहायक होगा, मैंने सटीक जानकारी प्रदान की है, और स्पष्ट रूप से इसकी सीमाएं बताई हैं। ** एफएक्यू ** से *: * सबसे ऊपर, ईमानदार रहें। यदि आप गलत जानकारी देखते हैं, तो इसे वोट दें। टिप्पणियां जोड़ें जो दर्शाती है कि, विशेष रूप से, गलत है। अपने आप के बेहतर उत्तर प्रदान करें। सबसे अच्छा - मौजूदा प्रश्नों और उत्तरों को संपादित और सुधारें! * –

8

यह सवाल एक पुराना है, लेकिन अन्य उत्तरों थोड़ा भ्रामक हैं। एरिक का जवाब रेडिस से पूरी तरह से असंबंधित है। Pfreixes का जवाब व्यक्तिगत मान्यताओं पर आधारित है और यह गलत है।

वास्तव में, यह GUID कुंजी (प्रदर्शन-वार) का उपयोग करने के लिए काफी सुरक्षित है क्योंकि 300+ वर्ण कुंजी भी ओ (1) संचालन पर महत्वपूर्ण प्रदर्शन को प्रभावित नहीं करती हैं। इस बेंचमार्क को जांचें: Does name length impact performance in Redis?

GUID आमतौर पर 32-36 वर्णों की लंबाई है, यदि आप हेक्स प्रतिनिधित्व का उपयोग कर रहे हैं। चूंकि इवान कैरोल ने टिप्पणियों में ध्यान दिया, रेडिस स्ट्रिंग बाइनरी सुरक्षित हैं, इसलिए आप बाइनरी वैल्यू का उपयोग कर सकते हैं और 128 बिट्स (16 वर्ण) तक के आकार को कम कर सकते हैं। ऐसी लंबाई वाली कुंजी बिल्कुल प्रदर्शन को नुकसान नहीं पहुंचाएगी। http://redis.io/topics/data-types-intro

+1

UUID की लंबाई 128 बिट्स है, जैसे md5sum। इसमें पात्रों के साथ कुछ लेना देना नहीं है। –

संबंधित मुद्दे