paint-brush
मिनिओ के साथ सुपरचार्ज टाइलडीबी इंजनद्वारा@minio
26,413 रीडिंग
26,413 रीडिंग

मिनिओ के साथ सुपरचार्ज टाइलडीबी इंजन

द्वारा MinIO7m2024/03/21
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

मिनिआईओ एक शक्तिशाली प्राथमिक टाइलडीबी बैकएंड बनाता है क्योंकि दोनों प्रदर्शन और पैमाने के लिए बनाए गए हैं।
featured image - मिनिओ के साथ सुपरचार्ज टाइलडीबी इंजन
MinIO HackerNoon profile picture


मिनिओ एक शक्तिशाली प्राथमिक टाइलडीबी बैकएंड बनाता है क्योंकि दोनों प्रदर्शन और पैमाने के लिए बनाए गए हैं। मिनिओ एक एकल गो बाइनरी है जिसे कई अलग-अलग प्रकार के क्लाउड और ऑन-प्रिमाइसेस वातावरण में लॉन्च किया जा सकता है। यह बहुत हल्का है, लेकिन सुविधाओं से भरपूर भी है प्रतिकृति और कूटलेखन , और यह प्रदान करता है एकीकरण विभिन्न अनुप्रयोगों के साथ. अपने उद्योग-अग्रणी प्रदर्शन और स्केलेबिलिटी के कारण मिनिओ टाइलडीबी के लिए आदर्श साथी है। मिनिओ जबरदस्त प्रदर्शन करने में सक्षम है - हमने इसे केवल 32 नोड्स के साथ GETs पर 325 GiB/s (349 GB/s) और PUTs पर 165 GiB/s (177 GB/s) पर बेंचमार्क किया है। ऑफ-द-शेल्फ NVMe SSDs - और इसका उपयोग एनालिटिक्स और एआई/एमएल वर्कलोड के साथ डेटा लेक/लेक हाउस बनाने के लिए किया जाता है।


टाइलडीबी का उपयोग विभिन्न प्रकार के अनुप्रयोगों में डेटा संग्रहीत करने के लिए किया जाता है, जैसे कि जीनोमिक्स, जियोस्पेशियल, बायोमेडिकल इमेजिंग, वित्त, मशीन लर्निंग, और बहुत कुछ। टाइलडीबी की शक्ति इस तथ्य से उत्पन्न होती है कि किसी भी डेटा को सघन या विरल बहु-आयामी सरणी के रूप में कुशलतापूर्वक मॉडल किया जा सकता है, जो कि अधिकांश डेटा विज्ञान टूलींग द्वारा आंतरिक रूप से उपयोग किया जाने वाला प्रारूप है। अपने डेटा और मेटाडेटा को टाइलडीबी सरणियों में संग्रहीत करके, आप हमारे कई एपीआई और एकीकरणों के माध्यम से अपनी पसंदीदा प्रोग्रामिंग भाषा या डेटा विज्ञान टूल के साथ डेटा तक कुशलतापूर्वक पहुंचने के साथ-साथ सभी डेटा भंडारण और प्रबंधन के दर्द को दूर करते हैं।

टाइलडीबी सेट करें

आइए इसमें गहराई से उतरें और टाइलडीबी का उपयोग करके कुछ परीक्षण डेटा बनाएं।


टाइलडीबी pip मॉड्यूल स्थापित करें, जिसे numpy निर्भरता भी स्थापित करनी चाहिए।


 % pip3 install tiledb Collecting tiledb Downloading tiledb-0.25.0-cp311-cp311-macosx_11_0_arm64.whl (10.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.4/10.4 MB 2.7 MB/s eta 0:00:00 Collecting packaging Downloading packaging-23.2-py3-none-any.whl (53 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 53.0/53.0 kB 643.1 kB/s eta 0:00:00 Collecting numpy>=1.23.2 Downloading numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl (14.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.0/14.0 MB 2.5 MB/s eta 0:00:00 Installing collected packages: packaging, numpy, tiledb Successfully installed numpy-1.26.3 packaging-23.2 tiledb-0.25.0


नीचे दी गई पायथन स्क्रिप्ट को चलाकर एक परीक्षण सरणी बनाएं, इसे tiledb-demo.py नाम दें।


 import tiledb import numpy as np import os, shutil # Local path array_local = os.path.expanduser("./tiledb_demo") # Create a simple 1D array tiledb.from_numpy(array_local, np.array([1.0, 2.0, 3.0])) # Read the array with tiledb.open(array_local) as A: print(A[:])


स्क्रिप्ट चलाएँ

 % python3 tiledb-demo.py [1. 2. 3.]


यह वास्तविक डेटा संग्रहीत करने के लिए tiledb_demo नामक एक निर्देशिका बनाएगा।

 % ls -l tiledb_demo/ total 0 drwxr-xr-x 3 aj staff 96 Jan 31 05:27 __commits drwxr-xr-x 2 aj staff 64 Jan 31 05:27 __fragment_meta drwxr-xr-x 3 aj staff 96 Jan 31 05:27 __fragments drwxr-xr-x 2 aj staff 64 Jan 31 05:27 __labels drwxr-xr-x 2 aj staff 64 Jan 31 05:27 __meta drwxr-xr-x 4 aj staff 128 Jan 31 05:27 __schema


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

डेटा को मिनियो बकेट में स्थानांतरित करना

हम अपने डॉकर इकोसिस्टम में mc को खींचकर शुरुआत करेंगे और फिर बकेट बनाने के लिए play.min.io का उपयोग करेंगे।


एमसी डोकर छवि खींचो

 % docker pull minio/mc


सभी बकेट सूचीबद्ध करके मिनियो प्ले के साथ परीक्षण करें

 % docker run minio/mc ls play [LONG TRUNCATED LIST OF BUCKETS]


हमारे स्थानीय टाइलडीबी डेटा को स्थानांतरित करने के लिए एक बकेट बनाएं, इसे tiledb-demo नाम दें।

 % docker run minio/mc mb play/tiledb-demo Bucket created successfully `play/tiledb-demo`.


tiledb_demo डेटा निर्देशिका की सामग्री को मिनियो tiledb-demo बकेट में कॉपी करें


 % docker run -v $(pwd)/tiledb_demo:/tiledb_demo minio/mc cp --recursive /tiledb_demo play/tiledb-demo `/tiledb_demo/__commits/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21.wrt` -> `play/tiledb-demo/tiledb_demo/__commits/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21.wrt` `/tiledb_demo/__fragments/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21/a0.tdb` -> `play/tiledb-demo/tiledb_demo/__fragments/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21/a0.tdb` `/tiledb_demo/__fragments/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21/__fragment_metadata.tdb` -> `play/tiledb-demo/tiledb_demo/__fragments/__1706696859767_1706696859767_777455531063403b811b2a2bf79d40e7_21/__fragment_metadata.tdb` `/tiledb_demo/__schema/__1706696859758_1706696859758_74e7040e138a4cca93e34aca1c587108` -> `play/tiledb-demo/tiledb_demo/__schema/__1706696859758_1706696859758_74e7040e138a4cca93e34aca1c587108` Total: 3.24 KiB, Transferred: 3.24 KiB, Speed: 1.10 KiB/s


यह सुनिश्चित करने के लिए कि डेटा कॉपी किया गया है tiledb-demo की सामग्री सूचीबद्ध करें।


 % docker run minio/mc ls play/tiledb-demo/tiledb_demo [2024-01-15 14:15:57 UTC] 0B __commits/ [2024-01-15 14:15:57 UTC] 0B __fragments/ [2024-01-15 14:15:57 UTC] 0B __schema/


नोट: मिनियो क्लाइंट ( mc ), या कोई भी एस3 संगत क्लाइंट, केवल गैर-रिक्त फ़ोल्डरों की प्रतिलिपि बनाता है। इसका कारण यह है कि ऑब्जेक्ट स्टोरेज दुनिया में डेटा को बकेट प्रीफ़िक्स के आधार पर व्यवस्थित किया जाता है, इसलिए गैर-खाली फ़ोल्डरों की आवश्यकता नहीं होती है। भविष्य के ब्लॉग में हम गहराई से जानेंगे कि डेटा को उपसर्गों और फ़ोल्डरों के साथ कैसे व्यवस्थित किया जाता है। इसलिए, आप केवल ये 3 फ़ोल्डर देखते हैं और बाकी नहीं जो हमने स्थानीय फ़ोल्डर में देखा था।


आइए अब नीचे दिए गए पायथन कोड का उपयोग करके उसी डेटा को सीधे मिनियो बकेट से पढ़ने का प्रयास करें, फ़ाइल को tiledb-minio-demo.py डेमो.py नाम दें।


 import tiledb import numpy as np # MinIO keys minio_key = "minioadmin" minio_secret = "minioadmin" # The configuration object with MinIO keys config = tiledb.Config() config["vfs.s3.aws_access_key_id"] = minio_key config["vfs.s3.aws_secret_access_key"] = minio_secret config["vfs.s3.scheme"] = "https" config["vfs.s3.region"] = "" config["vfs.s3.endpoint_override"] = "play.min.io:9000" config["vfs.s3.use_virtual_addressing"] = "false" # Create TileDB config context ctx = tiledb.Ctx(config) # The MinIO bucket URI path of tiledb demo array_minio = "s3://tiledb-demo/tiledb_demo/" with tiledb.open(array_minio, ctx=tiledb.Ctx(config)) as A: print(A[:])


आउटपुट परिचित दिखना चाहिए

 % python3 tiledb-minio-demo.py [1. 2. 3.]


हमने MiniIO से पढ़ा है, आगे देखते हैं कि हम डेटा को किसी मौजूदा स्रोत से MiniIO में कॉपी करने के बजाय सीधे MiniIO बकेट में कैसे लिख सकते हैं।

मिनियो बकेट को सीधे लिखना

अब तक हमने आपको दिखाया है कि स्थानीय भंडारण या मौजूदा बकेट में पहले से मौजूद डेटा को कैसे पढ़ा जाए। लेकिन अगर आप शुरू से ही मिनियो को सीधे लिखकर नई शुरुआत करना चाहते हैं, तो यह कैसे काम करेगा? चलो एक नज़र मारें।


मिनिओ बकेट में सीधे डेटा लिखने का कोड दो लाइन परिवर्तनों को छोड़कर ऊपर जैसा ही है।


मिनिओ बकेट का पथ जहां टाइलडीबी डेटा संग्रहीत है, को tiledb_minio_demo ( tiledb_demo के बजाय) में अद्यतन किया जाना चाहिए।


हम MiniIO बकेट में स्टोर करने के लिए ऐरे बनाने के लिए, tiledb.from_numpy फ़ंक्शन का उपयोग करेंगे, जैसा कि हमने पहले स्थानीय स्टोरेज के साथ किया था।


 [TRUNCATED] # The MinIO bucket URI path of tiledb demo array_minio = "s3://tiledb-demo/tiledb_minio_demo/" tiledb.from_numpy(array_minio, np.array([1.0, 2.0, 3.0]), ctx=tiledb.Ctx(config)) [TRUNCATED]


ये 2 परिवर्तन करने के बाद, स्क्रिप्ट चलाएँ और आपको नीचे आउटपुट देखना चाहिए

 % python3 tiledb-minio-demo.py [1. 2. 3.]


यदि आप स्क्रिप्ट को दोबारा चलाते हैं तो यह नीचे दी गई त्रुटि के साथ विफल हो जाएगी क्योंकि यह फिर से लिखने का प्रयास करेगी।

 tiledb.cc.TileDBError: [TileDB::StorageManager] Error: Cannot create array; Array 's3://tiledb-demo/tiledb_minio_demo/' already exists


बस निम्नलिखित पंक्ति पर टिप्पणी करें और आप इसे कई बार पुनः चला सकते हैं।

 # tiledb.from_numpy(array_minio, np.array([1.0, 2.0, 3.0]), ctx=tiledb.Ctx(config))


 % python3 tiledb-minio-demo.py [1. 2. 3.] % python3 tiledb-minio-demo.py [1. 2. 3.]


यह सुनिश्चित करने के लिए मिनियो प्ले बकेट की जाँच करें कि डेटा अपेक्षा के अनुरूप है


 % docker run minio/mc ls play/tiledb-demo/tiledb_minio_demo/ [2024-01-15 16:45:04 UTC] 0B __commits/ [2024-01-15 16:45:04 UTC] 0B __fragments/ [2024-01-15 16:45:04 UTC] 0B __schema/


लीजिए, मिनियो में डेटा प्राप्त करना बहुत आसान है। क्या आपको पहले जैसे ही परिणाम मिले? आपके पास होना चाहिए, लेकिन यदि आपने नहीं किया है तो कुछ चीजें हैं जिन्हें आप जांच सकते हैं।

सामान्य ख़तरे

हम कुछ सामान्य त्रुटियों पर नज़र डालेंगे जिनका सामना आप MiniIO को पढ़ने/लिखने का प्रयास करते समय कर सकते हैं।


यदि आपकी एक्सेस कुंजी और गुप्त कुंजी गलत हैं, तो आपको नीचे जैसा त्रुटि संदेश देखने की उम्मीद करनी चाहिए


 tiledb.cc.TileDBError: [TileDB::S3] Error: Error while listing with prefix 's3://tiledb-demo/tiledb_minio_demo/__schema/'... The request signature we calculated does not match the signature you provided. Check your key and signing method.


इसके बाद, आपको यह सुनिश्चित करना होगा कि होस्टनाम और पोर्ट सही हैं, उचित समापन बिंदु के बिना ये त्रुटियाँ होंगी जिनका आपको सामना करना पड़ेगा।


ग़लत होस्टनाम:

 tiledb.cc.TileDBError: [TileDB::S3] Error: … Couldn't resolve host name


ग़लत पोर्ट:

 tiledb.cc.TileDBError: [TileDB::S3] Error: … Couldn't connect to server


अंतिम लेकिन महत्वपूर्ण बात, सबसे गुप्त त्रुटियों में से एक जो मैंने देखी है वह निम्नलिखित है

 tiledb.cc.TileDBError: [TileDB::S3] Error: … [HTTP Response Code: -1] [Remote IP: 98.44.32.5] : curlCode: 56, Failure when receiving data from the peer


एक टन डिबगिंग के बाद यह पता चलता है कि यदि आप http का उपयोग करके कनेक्ट कर रहे हैं लेकिन मिनिओ सर्वर में टीएलएस सक्रिय है तो आपको उपरोक्त त्रुटि दिखाई देगी। बस सुनिश्चित करें कि कनेक्शन योजना सही कॉन्फ़िगरेशन पर सेट है, इस मामले में, config["vfs.s3.scheme"] = "https"।

रैक पर रैक

एक रैप गीत है (आप इसे खोज सकते हैं) जहां वे * खांसी* नकदी के ढेर पर ढेर होने के बारे में रैप करते हैं। लेकिन एक और रैप गाना है जहां वे दावा करते हैं कि उनके पास नकदी के इतने ढेर हैं कि उन्हें अब "स्टैक" नहीं कहा जा सकता, वे अब "रैक" हैं। अनिवार्य रूप से जब आपके ढेर इतने बड़े और इतने ऊंचे हो जाते हैं कि आपको नकदी के ढेर को स्टोर करने के लिए रैक पर रैक की आवश्यकता होती है।


यह एक उपयुक्त तुलना है क्योंकि आपके डेटा का ढेर आपके लिए उतना ही (या अधिक) मायने रखता है जितना कि नकदी का ढेर जिसके बारे में वे बात कर रहे हैं। यदि आपके सभी ऑब्जेक्ट - भौतिक या आभासी - को सुरक्षित और आसानी से पहुंच योग्य रखने के लिए मिनिओ जैसा कुछ होता।


मिश्रण में मिनियो के साथ, आप आसानी से टाइलडीबी को स्केल कर सकते हैं कई डेटासेंटरों में कई रैक सापेक्ष सहजता के साथ. आपको वे सभी सुविधाएं भी मिलती हैं जो MiniIO को शानदार बनाती हैं सुरक्षा और अभिगम नियंत्रण , टायरिंग , ऑब्जेक्ट लॉकिंग और रिटेंशन , कुंजी एन्क्रिप्शन सेवा (केईएस) , दूसरों के बीच में सीधे बॉक्स से बाहर। अपने सभी डेटा को MiniIO में रखने से, आप आवश्यक भंडारण जटिलता को कम करते हैं और इसलिए डेटा भंडारण लागत पर काफी बचत का एहसास करते हैं, जबकि साथ ही कमोडिटी हार्डवेयर पर MiniIO चलाने से सर्वोत्तम संभव प्रदर्शन-से-लागत अनुपात मिलता है। मिनियो आपके टाइलडीबी इंजन को उद्योग-अग्रणी प्रदर्शन के साथ सुपरचार्ज करता है जो क्वेरी को आनंददायक बनाता है।


हमने इस ब्लॉग में उपयोग किए गए कोड स्निपेट को इसमें जोड़ दिया है गिट भंडार . यदि आपके पास MiniIO को TileDB से कनेक्ट करने या MiniIO में डेटा माइग्रेट करने के बारे में कोई प्रश्न है, तो हमसे संपर्क करना सुनिश्चित करें। ढीला !


यहाँ भी दिखाई देता है.