जाहिर है यह एक पुराना सवाल है, लेकिन जब मैं टाइम्सरी डेटा के लिए मोंगोडीबी पर शोध कर रहा था तो मुझे यह पता चला। मैंने सोचा था कि नए इंसर्ट ऑपरेशंस के विपरीत, पहले से पूर्ण दस्तावेज़ आवंटित करने और अद्यतन संचालन करने के लिए निम्नलिखित दृष्टिकोण साझा करना उचित हो सकता है। ध्यान दें, इस दृष्टिकोण को यहां और यहां प्रलेखित किया गया था।
कल्पना कीजिए कि आप हर मिनट डेटा संग्रहीत कर रहे हैं। निम्नलिखित दस्तावेज़ संरचना पर विचार करें:
{
timestamp: ISODate("2013-10-10T23:06:37.000Z"),
type: ”spot_EURUSD”,
value: 1.2345
},
{
timestamp: ISODate("2013-10-10T23:06:38.000Z"),
type: ”spot_EURUSD”,
value: 1.2346
}
यह एक मानक संबंधपरक दृष्टिकोण के बराबर है। इस मामले में, आप रिकॉर्ड किए गए प्रति मूल्य एक दस्तावेज़ का उत्पादन करते हैं, जो बहुत सारे सम्मिलित संचालन का कारण बनता है। हम बेहतर कर सकते हैं। निम्नलिखित पर विचार करें:
{
timestamp_minute: ISODate("2013-10-10T23:06:00.000Z"),
type: “spot_EURUSD”,
values: {
0: 1.2345,
…
37: 1.2346,
38: 1.2347,
…
59: 1.2343
}
}
अब, हम एक दस्तावेज़ लिख सकते हैं, और 59 अद्यतन कर सकते हैं। यह बहुत बेहतर है क्योंकि अद्यतन परमाणु हैं, व्यक्तिगत लेखन छोटा है, और अन्य प्रदर्शन और समवर्ती लाभ हैं। लेकिन क्या होगा अगर हम पूरे दिन को स्टोर करना चाहते हैं, न कि केवल पूरे घंटे, एक दस्तावेज़ में। इसके बाद हमें अंतिम मूल्य प्राप्त करने के लिए 1440 प्रविष्टियों के साथ चलना होगा। इसमें सुधार करने के लिए, हम निम्नलिखित को आगे बढ़ा सकते हैं:
{
timestamp_hour: ISODate("2013-10-10T23:00:00.000Z"),
type: “spot_EURUSD”,
values: {
0: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
1: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
…,
22: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343},
23: { 0: 1.2343, 1: 1.2343, …, 59: 1.2343}
}
}
इस नेस्टेड दृष्टिकोण का उपयोग करते हुए, हमें अब केवल दिन में अंतिम मूल्य प्राप्त करने के लिए, अधिकतम 24 + 60 चलना होगा।
यदि हम पहले से पैडिंग के साथ भरे हुए सभी मूल्यों के साथ दस्तावेज़ बनाते हैं, तो हम यह सुनिश्चित कर सकते हैं कि दस्तावेज़ आकार नहीं बदलेगा और इसलिए स्थानांतरित नहीं किया जाएगा।