• Go में लिखा गया है, लेकिन लगभग language-agnostic है

  • time-series data, timestamp लगे कई values का collection होता है। हर item एक data point होता है

→ इसकी मात्रा बहुत अधिक होती है। अधिक होने पर ही इसका अर्थ बनता है। कई बार इसे प्रति सेकंड लाखों बार capture किया जाता है

→ Append-only, समय क्रम में sorted, हाल का data पहले

→ किसी खास time unit के हिसाब से bulk reading

→ High Cardinality (set का आकार बहुत बड़ा होता है)

→ ज़्यादातर हाल का data पढ़कर इस्तेमाल किया जाता है

  • time-series data में आम तौर पर writes अधिक होने की बात को ध्यान में रखकर TStorage DB engine library को Go भाषा में विकसित किया गया

  • data model

→ linear data model

→ data points को time unit के आधार पर partition किया जाता है

→ हर partition उस समयावधि के सभी data के साथ एक अलग और स्वतंत्र DB की तरह काम करता है

→ head और उसके अगले partition को ही heap में रखी जाने वाली memory partition के रूप में modify किया जा सकता है

→ data loss रोकने के लिए write करने से पहले WAL(Write Ahead Log) में लिखा जाता है

→ उससे पहले के partition data को disk पर single file के रूप में store किया जाता है। disk partitions read-only होते हैं

  • memory partition

→ data points की list heap पर array के रूप में दिखाई जाती है (Go के Slice जैसी)

→ latency और synchronization की वजह से out-of-order अक्सर होता है। अगर वही partition हो तो buffering के जरिए store करते समय फिर से sort किया जा सकता है, और अगर दूसरा partition हो तो head नहीं बल्कि पिछले partition के पीछे append करके संभव है

→ ठीक वही data store किया जाता है जो वास्तव में WAL में record होता है, ताकि error होने पर भी recovery संभव हो

  • disk partition

→ हर partition के लिए एक directory में metadata और compressed actual data store किया जाता है (Prometheus V3 Storage का छोटा रूप)

→ Memory-Mapped data format (जिसे kernel में mmap से cache किया जा सकता है)

→ metadata JSON format में index बनाता है

  • timestamp और value tuple के रूप में व्यक्त data encoding के लिए Facebook के Gorilla paper में प्रस्तावित encoding method का उपयोग किया गया है

→ timestamp और value को अलग-अलग methods से encode किया जाता है

timestamp unsigned 64-bit integer value है और इसमें Delta-of-delta encoding का उपयोग होता है

→ Delta encoding : पुराने value और current value के बीच का अंतर ही record करने का तरीका

→ Delta-of-Delta encoding : आम तौर पर यह निश्चित समय अंतराल पर बनता है, इसलिए delta का delta ही record किया जाता है

→ variable length में encode होने के कारण Delta-of-Delta सबसे कम space इस्तेमाल करता है

values signed 64-bit floating-point value हैं और इनमें XOR encoding का उपयोग होता है

→ पहला value वैसे ही store किया जाता है

→ अगले value के साथ XOR करके अगर 0 आता है, तो वह पुराने value के समान है, इसलिए सिर्फ एक 0 bit store की जाती है

→ 0 नहीं होने पर दूसरे bits के आधार पर गणना होती है (Meaningful Bit)

→ आगे/पीछे के 0 की गिनती करके, अगर 0 की संख्या समान हो तो 0 और meaningful bits ही store किए जाते हैं, और अगर अलग हो तो leading zero की संख्या, Meaningful Bit की संख्या और वही bits store किए जाते हैं

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.