Datomic: रिकॉर्ड सिस्टम के लिए एक सामान्य-उद्देश्य डेटाबेस
# Datomic की पृष्ठभूमि
- Datomic रिकॉर्ड सिस्टम के लिए एक सामान्य-उद्देश्य डेटाबेस है.
- डेटाबेस की स्थिति को
[entity, attribute, value] (EAV) ट्रिपल के रूप में व्यक्त किया जाता है, और इसे datom कहा जाता है.
- स्कीमा के माध्यम से attributes के type और cardinality को नियंत्रित किया जाता है.
- यह समय को स्पष्ट रूप से मॉडल करने वाला एक temporal database है.
- हर transaction की पहचान logical timestamp
t और wall-clock time txInstant से होती है.
- transaction datom को जोड़ या हटा सकते हैं.
- हर datom transaction reference बनाए रखता है.
- डेटाबेस इन tuples का लगातार बढ़ता हुआ set है.
# Datomic की विशेषताएं
- उपयोगकर्ता logical या wall-clock time पर डेटाबेस की snapshot स्थिति का अनुरोध कर सकते हैं.
- डेटाबेस का पूरा इतिहास देखा जा सकता है.
- Datalog-style API, declarative graph traversal API, और ODM-style
Entity data type के माध्यम से query की जा सकती है.
- इसके दो संस्करण हैं: Datomic Pro और Datomic Cloud.
# 1.1 आर्किटेक्चर
- Datomic Pro कई सहयोगी services से बना है.
- Transactors write transaction चलाते हैं, indexes बनाए रखते हैं, और data को storage में लिखते हैं.
- Peers thick clients हैं, जिनमें JVM library शामिल होती है; वे transaction submit करते हैं, query चलाते हैं, और results cache करते हैं.
- Clients thin clients हैं, जो transaction और query को peer server तक भेजते हैं.
- log में हर transaction को समय क्रम में जोड़ा जाता है.
- यह Cassandra या DynamoDB जैसे data stores में persistent और immutable trees के रूप में संग्रहीत होता है.
- global transaction order सुनिश्चित करने के लिए Sequential CaS operation का उपयोग किया जाता है.
- Peers सीधे storage और transactors से जुड़े होते हैं.
# 1.2 ट्रांज़ैक्शन मॉडल
- Datomic का transaction model अनोखा है.
- यह read और write paths को सख्ती से अलग करता है.
- read डेटाबेस की immutable state प्राप्त करते हैं.
- write transaction को operations की ordered list के रूप में व्यक्त किया जाता है.
- transaction functions डेटाबेस state को पढ़ते हैं और operations का नया set लौटाते हैं.
- transaction functions caller को value return नहीं करते.
- transaction केवल effects return करते हैं.
- NuBank Datomic का उपयोग करके financial services प्रदान करता है.
# 1.3 सुसंगतता
- यह ACID transaction का दावा करता है, और consistency model तथा durability guarantees को स्पष्ट रूप से वादा करता है.
- transaction को एकल atomic write के रूप में संग्रहीत किया जाता है.
- सभी peers किसी निश्चित समय तक पूर्ण हुए transaction को देखते हैं.
- यह Serializable transaction की गारंटी देता है.
- नवीनतम state के साथ sync करने के लिए d/sync को call किया जा सकता है.
- इसे single-writer system के रूप में डिज़ाइन किया गया है, लेकिन कई transactor एक साथ चल सकते हैं.
# 2 टेस्ट डिज़ाइन
- Jepsen test library का उपयोग करके Datomic test suite डिज़ाइन की गई.
- Datomic Pro 1.0.7075 को Debian Bookworm node cluster पर स्थापित किया गया.
- AWS पर DynamoDB table provision की गई.
- Transactors और Peers सहित विभिन्न nodes पर test चलाए गए.
- HTTP API के माध्यम से test suite operations किए गए.
- network partition और Garbage Collection सहित विभिन्न failures inject किए गए.
- systemd service का उपयोग करके transactors को restart किया गया.
# 2.1 सूची में जोड़ना
- Elle transaction checker का उपयोग करके list-append operation डिज़ाइन किए गए.
- हर list की पहचान primary key से होती है.
- read और append operation शामिल करने वाले transaction चलाए गए.
- Datomic multi-value attributes को unordered set के रूप में store करता है.
- transaction functions का उपयोग read-write transaction व्यक्त करने के लिए किया गया.
# 2.2 CaS का उपयोग करके सूची में जोड़ना
- db/cas function का उपयोग attribute के concurrent update को नियंत्रित करने के लिए किया जाता है.
- snapshot isolation सुनिश्चित करने के लिए CaS pattern का उपयोग किया गया.
- हर list को single-value, comma-separated string के रूप में encode किया गया.
# 2.3 आंतरिक सुसंगतता
- आंतरिक सुसंगतता को मापने के लिए operations डिज़ाइन किए गए.
- इनमें attribute values को कई बार बदलने, या facts को जोड़ने और हटाने वाले transaction शामिल हैं.
- CaS operation भी कई बार किए गए.
# 2.4 अनुमोदन
- approve और reject को simulate करने के लिए एक state machine डिज़ाइन की गई.
- approve और reject functions संबंधित state की जांच करते हैं और transaction को abort करते हैं.
# 3 परिणाम
- Datomic के मुख्य safety claims का उल्लंघन करने वाला व्यवहार नहीं मिला.
- transaction ऐसे दिखे मानो वे total order में execute हुए हों.
- (d/sync conn) का उपयोग करने वाले read transaction real-time order के साथ मेल खाते हैं.
- आंतरिक सुसंगतता Datomic के documentation से मेल खाती है, लेकिन सामान्य database behavior से अलग है.
# 3.1 आंतरिक सुसंगतता
- अधिकांश databases transaction के भीतर serial execution semantics प्रदान करते हैं.
- Datomic transaction के भीतर सभी operations को concurrent execution की तरह संभालता है.
- transaction functions केवल transaction की शुरुआत के समय की database state को observe करते हैं.
- single-cardinality attributes पर conflict होने पर transaction abort हो जाता है.
# 3.2 वर्चुअल write skew
- क्योंकि transaction functions concurrently execute होते हैं, इसलिए जो functions अलग-अलग सही हैं वे साथ में चलने पर गलत परिणाम दे सकते हैं.
- यदि approve और reject functions एक ही transaction में call किए जाएं, तो approval और rejection दोनों एक साथ हो सकते हैं.
- यह Datomic के documentation के अनुरूप है, लेकिन उपयोगकर्ताओं के लिए चौंकाने वाला हो सकता है.
# 3.3 एंटिटी प्रेडिकेट्स
- entity predicates का उपयोग करके database invariants सुनिश्चित किए जा सकते हैं.
- यह type, uniqueness, arbitrary predicates सहित विभिन्न constraints प्रदान करता है.
- entity predicates डेटाबेस की पूरी state की जांच करते हैं और तय करते हैं कि transaction की अनुमति दी जाए या नहीं.
- invariants सुनिश्चित करने के लिए approve और reject functions में entity predicates जोड़े गए.
GN⁺ की राय
- Datomic एक temporal database है, इसलिए data की पिछली states को आसानी से query किया जा सकता है, जिससे यह financial services जैसे रिकॉर्ड सिस्टम के लिए बहुत उपयोगी बनता है.
- transaction functions का concurrent execution model performance बढ़ाता है, लेकिन उपयोगकर्ताओं के लिए यह अपरिचित हो सकता है.
- entity predicates के जरिए जटिल data integrity constraints को आसानी से लागू किया जा सकता है.
- NuBank जैसी बड़े पैमाने की financial services में उपयोग होने के कारण इसकी stability और scalability प्रमाणित है.
- Datomic का अनोखा transaction model पारंपरिक databases से अलग सोच की मांग करता है, इसलिए इसमें learning curve हो सकती है.
1 टिप्पणियां
Hacker News राय
Hacker News टिप्पणियों का सार
दिलचस्प चर्चा और documentation में सुधार
Datomic के transaction behavior को समझना
Datomic रिपोर्ट का महत्व
Jepsen नाम की उत्पत्ति
Clojure प्रोग्राम लिखने में मदद
Datomic-जैसा datastore बनाना
Datomic का data model
Datomic documentation की स्पष्टता
single-threaded design के फ़ायदे
Datomic के transaction characteristics