paint-brush
MinIO সহ সুপারচার্জ টাইলডিবি ইঞ্জিনদ্বারা@minio
26,413 পড়া
26,413 পড়া

MinIO সহ সুপারচার্জ টাইলডিবি ইঞ্জিন

দ্বারা MinIO7m2024/03/21
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

MinIO একটি শক্তিশালী প্রাথমিক TileDB ব্যাকএন্ড তৈরি করে কারণ উভয়ই পারফরম্যান্স এবং স্কেলের জন্য তৈরি করা হয়েছে।
featured image - MinIO সহ সুপারচার্জ টাইলডিবি ইঞ্জিন
MinIO HackerNoon profile picture


MinIO একটি শক্তিশালী প্রাথমিক টাইলডিবি ব্যাকএন্ড তৈরি করে কারণ উভয়ই পারফরম্যান্স এবং স্কেলের জন্য নির্মিত। MinIO হল একটি একক Go বাইনারি যা বিভিন্ন ধরনের ক্লাউড এবং অন-প্রিম পরিবেশে চালু করা যেতে পারে। এটি খুব হালকা, তবে বৈশিষ্ট্যযুক্ত জিনিসগুলির মতো প্রতিলিপি এবং জোড়া লাগানো , এবং এটি প্রদান করে ইন্টিগ্রেশন বিভিন্ন অ্যাপ্লিকেশন সহ। MinIO তার শিল্প-নেতৃস্থানীয় কর্মক্ষমতা এবং মাপযোগ্যতার কারণে TileDB-এর জন্য নিখুঁত সঙ্গী। MinIO অসাধারণ পারফরম্যান্সে সক্ষম - আমরা GETs-এ এটিকে 325 GiB/s (349 GB/s) এবং PUTs-এ মাত্র 32 নোড সহ 165 GiB/s (177 GB/s) বেঞ্চমার্ক করেছি। অফ-দ্য-শেল্ফ NVMe SSDs - এবং বিশ্লেষণ এবং AI/ML কাজের চাপ সহ ডেটা লেক/লেক হাউস তৈরি করতে ব্যবহৃত হয়।


জিনোমিক্স, জিওস্প্যাশিয়াল, বায়োমেডিকাল ইমেজিং, ফাইন্যান্স, মেশিন লার্নিং এবং আরও অনেক কিছুতে ডেটা সঞ্চয় করতে TileDB ব্যবহার করা হয়। TileDB এর শক্তি এই সত্য থেকে উদ্ভূত হয় যে যেকোন ডেটাকে একটি ঘন বা স্পার্স মাল্টি-ডাইমেনশনাল অ্যারে হিসাবে দক্ষতার সাথে মডেল করা যেতে পারে, যা বেশিরভাগ ডেটা সায়েন্স টুলিং দ্বারা অভ্যন্তরীণভাবে ব্যবহৃত ফর্ম্যাট। TileDB অ্যারেতে আপনার ডেটা এবং মেটাডেটা সঞ্চয় করার মাধ্যমে, আপনি আমাদের অসংখ্য API এবং ইন্টিগ্রেশনের মাধ্যমে আপনার প্রিয় প্রোগ্রামিং ভাষা বা ডেটা সায়েন্স টুলের মাধ্যমে দক্ষতার সাথে ডেটা অ্যাক্সেস করার সময় সমস্ত ডেটা স্টোরেজ এবং পরিচালনার যন্ত্রণাগুলিকে বিমূর্ত করেন।

টাইলডিবি সেট আপ করুন

এর মধ্যে ডুব দিন এবং TileDB ব্যবহার করে কিছু পরীক্ষার ডেটা তৈরি করুন।


TileDB 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


আপনি এটি ব্যবহার চালিয়ে যেতে পারেন তবে সবকিছু স্থানীয় হলে এটি কোন বুনো নয় কারণ স্থানীয় ডিস্ক বা নোড ব্যর্থ হলে আপনি আপনার সম্পূর্ণ ডেটা হারাবেন। এর পরিবর্তে একটি MinIO বালতি থেকে এই একই ডেটা পড়ার মতো মজাদার কিছু করি৷

MinIO বালতিতে ডেটা স্থানান্তর করা হচ্ছে

আমরা আমাদের ডকার ইকোসিস্টেমে mc টেনে শুরু করব এবং তারপর বালতি তৈরি করতে play.min.io ব্যবহার করব।


এমসি ডকার ইমেজ টানুন

 % docker pull minio/mc


সমস্ত বালতি তালিকাবদ্ধ করে MinIO প্লে দিয়ে পরীক্ষা করুন

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


আমাদের স্থানীয় TileDB ডেটা সরানোর জন্য একটি বালতি তৈরি করুন, নাম দিন tiledb-demo

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


tiledb_demo ডেটা ডিরেক্টরির বিষয়বস্তু MinIO 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/


দ্রষ্টব্য: MinIO ক্লায়েন্ট ( mc ), বা যেকোনো S3 সামঞ্জস্যপূর্ণ ক্লায়েন্ট, শুধুমাত্র অ-খালি ফোল্ডারগুলি কপি করে। এর কারণ হ'ল অবজেক্ট স্টোরেজ ওয়ার্ল্ডে ডেটা বাকেট প্রিফিক্সের উপর ভিত্তি করে সংগঠিত হয়, তাই অ-খালি ফোল্ডারের প্রয়োজন হয় না। ভবিষ্যতের ব্লগে আমরা উপসর্গ এবং ফোল্ডারগুলির সাথে ডেটা কীভাবে সংগঠিত হয় সে সম্পর্কে আরও গভীরে ডুব দেব। সুতরাং, আপনি শুধুমাত্র এই 3টি ফোল্ডার দেখতে পাচ্ছেন এবং বাকীটি নয় যা আমরা স্থানীয় ফোল্ডারে দেখেছি।


এখন নিচের পাইথন কোডটি ব্যবহার করে MinIO বাকেট থেকে সরাসরি একই ডেটা পড়ার চেষ্টা করা যাক, ফাইলটির নাম tiledb-minio-demo.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.]


আমরা MinIO থেকে পড়েছি, পরবর্তী সোর্স থেকে MinIO-তে কপি করার পরিবর্তে আমরা কীভাবে সরাসরি MinIO বালতিতে ডেটা লিখতে পারি তা দেখা যাক।

MinIO বালতিতে সরাসরি লেখা

এখন পর্যন্ত আমরা আপনাকে দেখিয়েছি যে কীভাবে ইতিমধ্যে বিদ্যমান ডেটা পড়তে হয়, হয় স্থানীয় স্টোরেজ বা বিদ্যমান বালতিতে। কিন্তু আপনি যদি গেট-গো থেকে সরাসরি MinIO-তে লিখে নতুন করে শুরু করতে চান, তাহলে সেটা কীভাবে কাজ করবে? একবার দেখা যাক.


দুটি লাইন পরিবর্তন ছাড়া সরাসরি MinIO বালতিতে ডেটা লেখার কোড উপরের মতই।


MinIO বাকেটের পাথ যেখানে TileDB ডেটা সংরক্ষণ করা হয় তা অবশ্যই tiledb_minio_demo ( tiledb_demo এর পরিবর্তে) আপডেট করতে হবে।


আমরা tiledb.from_numpy ফাংশনটি ব্যবহার করব, যেমনটি আমরা আগে স্থানীয় স্টোরেজের সাথে করেছিলাম, MinIO বালতিতে সংরক্ষণ করার জন্য অ্যারে তৈরি করতে।


 [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.]


প্রত্যাশিত হিসাবে ডেটা আছে তা নিশ্চিত করতে MinIO প্লে বালতি পরীক্ষা করুন৷


 % 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/


সেখানে আপনি যান, MinIO-তে ডেটা পাওয়া সহজ। আপনি কি আগের মত একই ফলাফল পেয়েছেন? আপনার থাকা উচিত, কিন্তু আপনি যদি না করেন তবে কয়েকটি জিনিস আছে আপনি চেক আউট করতে পারেন।

সাধারণ ক্ষতি

MinIO-তে পড়ার/লেখার চেষ্টা করার সময় আপনার সম্মুখীন হতে পারে এমন কিছু সাধারণ ত্রুটি আমরা দেখব।


আপনার অ্যাক্সেস কী এবং গোপন কী ভুল হলে, আপনি নীচের মত একটি ত্রুটি বার্তা দেখতে আশা করা উচিত


 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 ব্যবহার করে সংযোগ করছেন কিন্তু MinIO সার্ভারে TLS সক্রিয় থাকে তবে আপনি উপরের ত্রুটিটি দেখতে পাবেন। শুধু নিশ্চিত করুন যে সংযোগ স্কিমটি সঠিক কনফিগারেশনে সেট করা আছে, এই ক্ষেত্রে, config["vfs.s3.scheme"] = "https"।

Racks উপর Racks উপর Racks

একটি র‍্যাপ গান আছে (আপনি এটি অনুসন্ধান করতে পারেন) যেখানে তারা * কাশি * নগদ স্ট্যাকের স্ট্যাকের উপর স্ট্যাক থাকার বিষয়ে র‌্যাপ করে। কিন্তু আরেকটি র‍্যাপ গান আছে যেখানে তারা দাবি করে যে তাদের কাছে এত বেশি নগদ টাকার স্তুপ রয়েছে যে তাদের আর "স্ট্যাক" বলা যায় না, তারা এখন "র্যাক"। মূলত যখন আপনার স্ট্যাকগুলি এত বড় এবং এত উঁচু হয়ে যায় তখন আপনার নগদ স্ট্যাকগুলি সঞ্চয় করার জন্য র‌্যাকগুলিতে র‌্যাকগুলির প্রয়োজন হয়৷


এটি একটি উপযুক্ত তুলনা কারণ আপনার ডেটার স্তুপগুলি আপনার কাছে নগদ টাকার স্তূপের মতোই (বা আরও বেশি) বোঝায় যা তারা নিয়ে র‍্যাপ করছে৷ আপনার সমস্ত বস্তু - ভৌত বা ভার্চুয়াল - নিরাপদ এবং সহজে অ্যাক্সেসযোগ্য রাখার জন্য যদি কেবল MinIO এর মতো কিছু থাকে।


মিক্সে MinIO এর সাথে, আপনি সহজেই TileDB কে স্কেল করতে পারেন একাধিক ডেটাসেন্টার জুড়ে একাধিক র্যাক আপেক্ষিক স্বাচ্ছন্দ্যে। এছাড়াও আপনি এমন সমস্ত বৈশিষ্ট্য পাবেন যা MinIO-কে দুর্দান্ত করে তোলে নিরাপত্তা এবং অ্যাক্সেস নিয়ন্ত্রণ , টিয়ারিং , অবজেক্ট লকিং এবং রিটেনশন , কী এনক্রিপশন পরিষেবা (কেইএস) , অন্যদের মধ্যে ডান বক্সের বাইরে. MinIO-তে আপনার সমস্ত ডেটা থাকার মাধ্যমে, আপনি প্রয়োজনীয় স্টোরেজ জটিলতা হ্রাস করেন এবং সেইজন্য ডেটা স্টোরেজ খরচে যথেষ্ট সঞ্চয় উপলব্ধি করেন, একই সময়ে কমোডিটি হার্ডওয়্যারে MinIO চালানো সর্বোত্তম সম্ভাব্য পারফরম্যান্স-টু-কস্ট অনুপাত প্রদান করে। MinIO আপনার TileDB ইঞ্জিনকে শিল্প-নেতৃস্থানীয় পারফরম্যান্সের সাথে সুপারচার্জ করে যা অনুসন্ধানকে আনন্দ দেয়।


আমরা এই ব্লগে ব্যবহৃত কোড স্নিপেট যোগ করেছি a git সংগ্রহস্থল . MinIO কে TileDB-তে সংযোগ করতে বা MinIO-তে ডেটা স্থানান্তর করার বিষয়ে আপনার কোন প্রশ্ন থাকলে আমাদের সাথে যোগাযোগ করতে ভুলবেন না স্ল্যাক !


এছাড়াও এখানে উপস্থিত হয়.