मिनिओ एक शक्तिशाली प्राथमिक टाइलडीबी बैकएंड बनाता है क्योंकि दोनों प्रदर्शन और पैमाने के लिए बनाए गए हैं। मिनिओ एक एकल गो बाइनरी है जिसे कई अलग-अलग प्रकार के क्लाउड और ऑन-प्रिमाइसेस वातावरण में लॉन्च किया जा सकता है। यह बहुत हल्का है, लेकिन सुविधाओं से भरपूर भी है
टाइलडीबी का उपयोग विभिन्न प्रकार के अनुप्रयोगों में डेटा संग्रहीत करने के लिए किया जाता है, जैसे कि जीनोमिक्स, जियोस्पेशियल, बायोमेडिकल इमेजिंग, वित्त, मशीन लर्निंग, और बहुत कुछ। टाइलडीबी की शक्ति इस तथ्य से उत्पन्न होती है कि किसी भी डेटा को सघन या विरल बहु-आयामी सरणी के रूप में कुशलतापूर्वक मॉडल किया जा सकता है, जो कि अधिकांश डेटा विज्ञान टूलींग द्वारा आंतरिक रूप से उपयोग किया जाने वाला प्रारूप है। अपने डेटा और मेटाडेटा को टाइलडीबी सरणियों में संग्रहीत करके, आप हमारे कई एपीआई और एकीकरणों के माध्यम से अपनी पसंदीदा प्रोग्रामिंग भाषा या डेटा विज्ञान टूल के साथ डेटा तक कुशलतापूर्वक पहुंचने के साथ-साथ सभी डेटा भंडारण और प्रबंधन के दर्द को दूर करते हैं।
आइए इसमें गहराई से उतरें और टाइलडीबी का उपयोग करके कुछ परीक्षण डेटा बनाएं।
टाइलडीबी 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"।
एक रैप गीत है (आप इसे खोज सकते हैं) जहां वे * खांसी* नकदी के ढेर पर ढेर होने के बारे में रैप करते हैं। लेकिन एक और रैप गाना है जहां वे दावा करते हैं कि उनके पास नकदी के इतने ढेर हैं कि उन्हें अब "स्टैक" नहीं कहा जा सकता, वे अब "रैक" हैं। अनिवार्य रूप से जब आपके ढेर इतने बड़े और इतने ऊंचे हो जाते हैं कि आपको नकदी के ढेर को स्टोर करने के लिए रैक पर रैक की आवश्यकता होती है।
यह एक उपयुक्त तुलना है क्योंकि आपके डेटा का ढेर आपके लिए उतना ही (या अधिक) मायने रखता है जितना कि नकदी का ढेर जिसके बारे में वे बात कर रहे हैं। यदि आपके सभी ऑब्जेक्ट - भौतिक या आभासी - को सुरक्षित और आसानी से पहुंच योग्य रखने के लिए मिनिओ जैसा कुछ होता।
मिश्रण में मिनियो के साथ, आप आसानी से टाइलडीबी को स्केल कर सकते हैं
हमने इस ब्लॉग में उपयोग किए गए कोड स्निपेट को इसमें जोड़ दिया है
यहाँ भी दिखाई देता है.