4.1 वर्णन

Apache Cassandra ही एक वितरित डेटाबेस व्यवस्थापन प्रणाली आहे जी NoSQL सिस्टीमच्या वर्गाशी संबंधित आहे आणि हॅशच्या स्वरूपात सादर केलेल्या प्रचंड डेटा अॅरेचे उच्च स्केलेबल आणि विश्वासार्ह स्टोरेज तयार करण्यासाठी डिझाइन केलेले आहे.

सुरुवातीला, हा प्रकल्प Facebook च्या आतड्यांमध्ये विकसित केला गेला आणि 2009 मध्ये Apache Software Foundation च्या विंग अंतर्गत हस्तांतरित करण्यात आला, ही संस्था प्रकल्प विकसित करत आहे. Cassandra वर आधारित औद्योगिक उपाय सिस्को, IBM, Cloudkick, Reddit, Digg, Rackspace, Huawei, Netflix, Apple, Instagram, GitHub, Twitter आणि Spotify सारख्या कंपन्यांना सेवा प्रदान करण्यासाठी तैनात केले आहेत. 2011 पर्यंत, कॅसॅन्ड्रा अंतर्गत एकल डेटाबेस सेवा देणार्‍या सर्वात मोठ्या सर्व्हर क्लस्टरमध्ये 400 पेक्षा जास्त मशीन्स होत्या आणि त्यात 300 TB पेक्षा जास्त डेटा होता.

जावा भाषेत लिहिलेले , ते DynamoDB सारखी वितरित हॅश प्रणाली लागू करते, जी वाढत्या डेटा व्हॉल्यूमसह जवळजवळ रेखीय स्केलेबिलिटी प्रदान करते. हे स्तंभांच्या कुटुंबावर आधारित डेटा स्टोरेज मॉडेल वापरते, जे MemcacheDB सारख्या सिस्टीमपेक्षा वेगळे आहे, जे अनेक स्तरांच्या नेस्टिंगसह हॅश संचयित करण्याच्या क्षमतेद्वारे फक्त की-व्हॅल्यू जोडीमध्ये डेटा संग्रहित करते.

दोष-सहिष्णु DBMS च्या श्रेणीशी संबंधित आहे: डेटाबेसमध्ये ठेवलेला डेटा वितरित नेटवर्कच्या अनेक नोड्सवर स्वयंचलितपणे प्रतिरूपित केला जातो किंवा अनेक डेटा केंद्रांमध्ये समान रीतीने वितरित केला जातो. जेव्हा एखादे नोड अयशस्वी होते, तेव्हा त्याची कार्ये इतर नोड्सद्वारे उचलली जातात, क्लस्टरमध्ये नवीन नोड्स जोडणे आणि कॅसॅंड्रा आवृत्ती अद्यतनित करणे हे अतिरिक्त मॅन्युअल हस्तक्षेपाशिवाय आणि इतर नोड्सच्या पुनर्रचनाशिवाय केले जाते.

तथापि, लोड बॅलन्सिंगची गुणवत्ता टिकवून ठेवण्यासाठी, विद्यमान नोड्ससह, प्रत्येक नोडसाठी की (लेबल्स) पुन्हा निर्माण करण्याची शिफारस केली जाते. नोड्सच्या संख्येत एकापेक्षा जास्त वाढ झाल्यास (2 वेळा, 3 वेळा आणि असेच) अस्तित्वात असलेल्या नोड्ससाठी मुख्य निर्मिती टाळता येऊ शकते.

4.2 डेटा मॉडेल

Cassandra शब्दावलीमध्ये, अनुप्रयोग हे कीस्पेससह कार्य करते, जे रिलेशनल मॉडेलमधील डेटाबेस स्कीमाच्या संकल्पनेशी संबंधित आहे. या कीस्पेसमध्ये अनेक स्तंभ कुटुंबे असू शकतात, जी रिलेशनल टेबलच्या संकल्पनेशी संबंधित आहेत.

या बदल्यात, स्तंभ कुटुंबांमध्ये स्तंभ (स्तंभ) असतात, जे रेकॉर्ड (रो) मधील की (रो की) वापरून एकत्र केले जातात. स्तंभामध्ये तीन भाग असतात: नाव (स्तंभाचे नाव), टाइमस्टॅम्प (टाइमस्टॅम्प) आणि मूल्य (मूल्य). रेकॉर्डमधील कॉलम ऑर्डर केले आहेत. रिलेशनल डेटाबेसच्या विपरीत, रेकॉर्डमध्ये (आणि डेटाबेसच्या दृष्टीने या पंक्ती आहेत) इतर रेकॉर्ड्समध्ये समान नावांचे स्तंभ आहेत की नाही यावर कोणतेही निर्बंध नाहीत - नाही.

स्तंभ कुटुंबे अनेक प्रकारचे असू शकतात, परंतु या लेखात आम्ही हा तपशील वगळू. तसेच Cassandra च्या नवीनतम आवृत्त्यांमध्ये, CQL भाषा वापरून डेटा (DDL, DML) परिभाषित करणे आणि बदलणे, तसेच दुय्यम निर्देशांक तयार करण्यासाठी क्वेरी कार्यान्वित करणे शक्य झाले.

कॅसॅन्ड्रामध्ये साठवलेले विशिष्ट मूल्य याद्वारे ओळखले जाते:

  • keyspace हे ऍप्लिकेशन (डोमेन) साठी बंधनकारक आहे. तुम्हाला एकाच क्लस्टरवर वेगवेगळ्या ऍप्लिकेशन्समधील डेटा होस्ट करण्याची अनुमती देते;
  • कॉलम फॅमिली हे क्वेरीसाठी बंधनकारक आहे;
  • की क्लस्टर नोडला बंधनकारक आहे. जतन केलेले स्तंभ कोणत्या नोड्सवर संपतील हे कळ ठरवते;
  • कॉलमचे नाव रेकॉर्डमधील एखाद्या विशेषतासाठी बंधनकारक आहे. तुम्हाला एका एंट्रीमध्ये एकाधिक मूल्ये संचयित करण्याची अनुमती देते.

प्रत्येक मूल्य टाइमस्टॅम्पशी संबंधित आहे, वापरकर्त्याने निर्दिष्ट केलेली संख्या जी रेकॉर्डिंग दरम्यान विरोधाभास सोडवण्यासाठी वापरली जाते: संख्या जितकी मोठी असेल तितका नवीन स्तंभ मानला जातो आणि जेव्हा तुलना केली जाते तेव्हा जुने स्तंभ ओव्हरराइट केले जातात.

4.3 डेटा प्रकार

डेटा प्रकारांनुसार: कीस्पेस आणि कॉलम फॅमिली स्ट्रिंग (नावे); टाइमस्टॅम्प हा 64-बिट क्रमांक आहे; आणि की, कॉलमचे नाव आणि कॉलम व्हॅल्यू ही बाइट्सची अॅरे आहे. कॅसांड्राकडे डेटा प्रकारांची संकल्पना देखील आहे. कॉलम फॅमिली तयार करताना हे प्रकार डेव्हलपरद्वारे (वैकल्पिकरित्या) निर्दिष्ट केले जाऊ शकतात.

स्तंभांच्या नावांसाठी याला तुलनाकर्ता म्हणतात, मूल्ये आणि कळांसाठी याला प्रमाणक म्हणतात. स्तंभाच्या नावांसाठी कोणती बाइट मूल्ये अनुमत आहेत आणि त्यांची ऑर्डर कशी करावी हे प्रथम परिभाषित करते. दुसरे म्हणजे बाइट व्हॅल्यूज कॉलम आणि की व्हॅल्यूजसाठी वैध आहेत.

जर हे डेटा प्रकार सेट केलेले नसतील, तर कॅसॅन्ड्रा मूल्ये संग्रहित करते आणि त्यांची तुलना बाइट स्ट्रिंग्स (बाइटटाइप) म्हणून करते कारण, ते आंतरिकरित्या संग्रहित केले जातात.

डेटा प्रकार आहेत:

  • बाइट प्रकार : कोणतीही बाइट स्ट्रिंग (कोणतेही प्रमाणीकरण नाही)
  • AsciiType : ASCII स्ट्रिंग
  • UTF8 प्रकार : UTF-8 स्ट्रिंग
  • IntegerType : अनियंत्रित आकारासह संख्या
  • Int32Type : 4-बाइट क्रमांक
  • लाँगटाइप : 8-बाइट क्रमांक
  • UUIDT प्रकार : UUID प्रकार 1 किंवा 4
  • टाईमयूयूआयडीटाइप : टाइप 1 यूयूआयडी
  • तारीख प्रकार : 8-बाइट टाइमस्टॅम्प मूल्य
  • बुलियन प्रकार : दोन मूल्ये: सत्य = 1 किंवा असत्य = 0
  • फ्लोटटाइप : 4-बाइट फ्लोटिंग पॉइंट नंबर
  • डबलटाइप : 8-बाइट फ्लोटिंग पॉइंट नंबर
  • दशांश प्रकार : अनियंत्रित आकार आणि फ्लोटिंग पॉइंट असलेली संख्या
  • काउंटर कॉलम प्रकार : 8 बाइट काउंटर

कॅसॅंड्रामध्ये, सर्व डेटा लेखन ऑपरेशन्स नेहमी पुनर्लेखन ऑपरेशन्स असतात, म्हणजे, जर आधीपासून अस्तित्वात असलेली समान की आणि नाव असलेला स्तंभ स्तंभ कुटुंबात आला आणि टाइमस्टॅम्प जतन केलेल्या पेक्षा मोठा असेल, तर मूल्य अधिलिखित केले जाते. . रेकॉर्ड केलेली मूल्ये कधीही बदलत नाहीत, फक्त नवीन स्तंभ नवीन मूल्यांसह येतात.

कॅसॅन्ड्राला लिहिणे हे वाचण्यापेक्षा वेगवान आहे. हे डिझाइनमध्ये घेतलेल्या दृष्टिकोनात बदल करते. जर आपण डेटा मॉडेल डिझाइन करण्याच्या दृष्टिकोनातून कॅसॅन्ड्राचा विचार केला तर, स्तंभ कुटुंबाची कल्पना टेबल म्हणून नव्हे तर एक भौतिक दृश्य म्हणून करणे सोपे आहे - अशी रचना जी काही जटिल क्वेरीचा डेटा दर्शवते, परंतु त्यावर संग्रहित करते. डिस्क

क्वेरी वापरून काही प्रकारे डेटा तयार करण्याचा प्रयत्न करण्याऐवजी, या क्वेरीसाठी आवश्यक असलेल्या सर्व गोष्टी लक्ष्य कुटुंबात संग्रहित करण्याचा प्रयत्न करणे चांगले आहे. म्हणजेच, घटकांमधील संबंध किंवा वस्तूंमधील संबंधांच्या बाजूने नाही तर प्रश्नांच्या बाजूने संपर्क साधणे आवश्यक आहे: कोणती फील्ड निवडणे आवश्यक आहे; रेकॉर्ड कोणत्या क्रमाने जावे; मुख्य गोष्टींशी संबंधित कोणता डेटा एकत्रितपणे मागवावा - हे सर्व आधीच स्तंभ कुटुंबात संग्रहित केले जावे.

रेकॉर्डमधील स्तंभांची संख्या सैद्धांतिकदृष्ट्या 2 अब्ज इतकी मर्यादित आहे. हे एक संक्षिप्त विषयांतर आहे आणि अधिक तपशील डिझाइन आणि ऑप्टिमायझेशन तंत्रावरील लेखात आढळू शकतात. आणि आता कॅसॅन्ड्रामध्ये डेटा जतन करण्याच्या आणि वाचण्याच्या प्रक्रियेचा शोध घेऊया.