2013-12-11 14 views
10

मैंने JSON representation of a mailbox so that I can look up mails easily डिज़ाइन किया है, उदाहरण के लिए mailjson[UID].BodyJSON डिज़ाइन सर्वोत्तम प्रथाओं

हालांकि AngularJS और एंबर देखने के बाद, templating MVC जे एस इंजन, ऐसा लगता है कि JSON प्रारूप में होने चाहिए:

[{ 
    "id": 1, 
    "body": "Blah blah blah..." 
}, 
{ 
    "id": 2, 
    "body": "More blah foo blah" 
}, 
{ 
    "id": 3, 
    "body": "Hopefully you understand this example" 
}] 

और फिर वहाँ कुछ findAll (आईडी) समारोह आइटम हड़पने के लिए आधारित है आईडी पर एक चाहता है, जो JSON के माध्यम से पुनरावृत्त करता है। तो अब मैं सोच रहा हूं कि मेरे JSON डिज़ाइन में योग्यता है? क्या मैं इसे गलत कर रहा हूँ? लोग मेरे JSON के साथ उपयोग कर रहे स्पैम लुकअप डिज़ाइन का उपयोग क्यों नहीं करते हैं?

यह सुनिश्चित करने के लिए कोई अन्य युक्तियाँ कि मेरे पास एक अच्छी डेटा संरचना डिज़ाइन है, मैं आभारी रहूंगा।

+2

ऐसा लगता है कि आप मूल रूप से हैश टेबल बनाम सूचियों/सरणी के (डी) फायदे के लिए पूछ रहे हैं। यह सब इस बात पर निर्भर करता है कि आप मुख्य रूप से अपने डेटा के साथ क्या कर रहे हैं। –

+0

मैं मेल अभिलेखागार उत्पन्न करने के लिए ऐसा कर रहा हूं https://github.com/kaihendry/imap2json – hendry

+3

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

उत्तर

6

JSON में बड़ी तालिका के संग्रहण के लिए सर्वोत्तम अभ्यास सरणी का उपयोग करना है।

कारण यह है कि जेएसओएन सरणी को मेमोरी सरणी में पार्स करते समय मानचित्र निर्माण के लिए कोई गति दंड नहीं होता है। यदि आपको त्वरित पहुंच के लिए कई क्षेत्रों द्वारा इन-मेमोरी इंडेक्स बनाने की आवश्यकता है, तो आप इसे लोड करने के दौरान या बाद में कर सकते हैं। लेकिन अगर आप जेएसओएन को आपके जैसा स्टोर करते हैं, तो आपके पास नक्शा बनाने के बिना जल्दी लोड करने का विकल्प नहीं है क्योंकि JSON पार्सर को हमेशा आपकी संरचना के आधार पर आईडी के उस विशाल मानचित्र को बनाना होगा।

मेमोरी में डेटा को संग्रहीत करने का तरीका डिस्क पर भंडारण की संरचना के समान नहीं होना चाहिए (और नहीं होना चाहिए) आंतरिक जावास्क्रिप्ट मानचित्र संरचना को क्रमबद्ध/deserialize करने का कोई तरीका नहीं है। यदि यह संभव था तो आप एमएस एसक्यूएल सर्वर स्टोर्स टेबल और इंडेक्स जैसे इंडेक्स को क्रमबद्ध और स्टोर करेंगे।

लेकिन अगर आप जिस फ्रेमवर्क का उपयोग कर रहे हैं, वह आपको स्मृति और डिस्क में समान संरचना रखने के लिए मजबूर करता है तो मैं आईडी को एक बड़ी वस्तु में कुंजी के रूप में उपयोग करने की आपकी पसंद का समर्थन करता हूं, क्योंकि सर्वर से और जेएसओएन अनुरोधों में आईडी को पास करना आसान है ईमेल आइटम के साथ कोई कार्रवाई करने या यूआई में अपने राज्य को अपडेट करने के लिए, यह मानते हुए कि सर्वर और ब्राउज़र दोनों ईमेल आइटम्स की स्मृति में महत्वपूर्ण सूची रखते हैं।

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