2010-04-01 8 views
21

डेटास्टोर इकाई के key_name को परिभाषित करने के लिए अधिकतम वर्णों का उपयोग किया जा सकता है?कितना लंबा (अधिकतम अक्षर) डेटास्टोर इकाई key_name हो सकता है? क्या यह बहुत लंबा key_names हेवर करना बुरा है?

क्या यह बहुत लंबा key_names होना बुरा है?

उदाहरण के लिए: आइए कहें कि हम 170 अक्षरों के key_names का उपयोग करते हैं, जो अक्षांश के लिए 140 से अधिक संख्यात्मक वर्णों की लंबाई और 10 अक्षांश के लिए 10 और टाइमस्टैम्प के लिए 10 है।

(जैसे एक KEY_NAME का तर्क: तो इस तरह के एक KEY_NAME का उपयोग करके हम आसानी से और जल्दी के बाद से एक ही संदेश एक ही जगह और समय पर एक से अधिक बार नहीं आना चाहिए, कोई डुप्लिकेट पोस्टिंग के बारे में सुनिश्चित हो सकता है।)

+0

मैं लंबे समय से कुंजी नाम का उपयोग के लिए एक और कारण है जोड़ सकते हैं। मेरे डेटाटाइप में से एक दो अन्य इकाइयों (किसी भी प्रकार के) के बीच संबंध का प्रतिनिधित्व करता है, और मेरी इकाइयों का मुख्य नाम दो एन्कोडेड कुंजी हैं जो मध्य में अंडरस्कोर के साथ हैं। अगर संस्थाओं में माता-पिता (और दादा दादी आदि) होते हैं, तो चाबियाँ बहुत लंबी हो सकती हैं। – yngling

उत्तर

11

कोई कठोर अधिकतम नहीं है - कुंजी नाम की अधिकतम लंबाई एक कुंजी की अधिकतम लंबाई है, कुछ ओवरहेड कम है, और चाबियां बहुत लंबी हो सकती हैं।

बहुत लंबे नामों के लिए यह बुरा है, हालांकि: इसे संग्रहीत करने और पुनर्प्राप्त करने के अलावा, प्रत्येक इंडेक्स एंट्री में वह मुख्य नाम होता है जिसका संदर्भ है, अब तक के प्रमुख नामों का मतलब उच्च इंडेक्सिंग ओवरहेड है। यदि आप बड़े टेक्स्ट पर विशिष्टता सुनिश्चित करना चाहते हैं, तो आपका सबसे अच्छा विकल्प इनपुट का MD5 या SHA1 योग कुंजी नाम बनाना है, जो विशिष्टता और एक छोटा (-ish) कुंजी नाम दोनों सुनिश्चित करता है।

+2

अच्छा, आम तौर पर कोई हैशिंग नहीं - न ही एमडी 5, न ही SHA1 विशिष्टता सुनिश्चित कर सकता है। व्यावहारिक रूप से बोलते हुए - सूर्य इन हशों की टक्कर से जल्दी उड़ाएगा :) –

41

असल में, कुंजी नाम स्ट्रिंग प्रॉपर्टी वैल्यू की तरह 500 वर्ण तक ही सीमित हैं। उदाहरण देखें Key.to_path(), जो ValidateString() कॉल:

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/datastore_types.py#413

जो चूक max_len_MAX_STRING_LENGTH है, जो 500 है:

http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/datastore_types.py#87

+0

क्या यह ndb के लिए सच है? जावा के बारे में क्या? मुझे संदेह है कि निक का जवाब बैकएंड सही है - यह सिर्फ वह सॉफ्टवेयर है जो इस सीमा को लागू कर रहा है। – mjibson

+0

iirc बैकएंड एक ही सीमा लागू करता है। (मैंने इसमें बहुत कुछ लिखा था, लेकिन यह थोड़ी देर पहले था, और मेरे पास अब तक कोड तक पहुंच नहीं है।: पी) किसी भी मामले में, एनएनडीबी, गो आदि में जांचना आसान है – ryan

+1

बस पुष्टि करने के लिए वर्तमान में, क्या @ryan ने कहा कि बैकएंड में सत्यापन के बारे में अभी भी सच है। –

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