প্রতি তথ্য সংগ্রহ অধ্যায়গুলি সেগমেন্টে বিভাজিত হন। প্রতি সেগমেন্টের নিজস্ব ভেক্টর স্টোরেজ, পেলোয়াড স্টোরেজ, এবং ইন্ডেক্স রয়েছ।
সেগমেন্টে তথ্য গুলি সাধারণত একে অপরের উপর নাকি চালিয়ে নেওয়া হয় না। তবে, একই পয়েন্ট কে একাধিক সেগমেন্টে সংরক্ষণ করা থেকে সমস্যা হয় না যেহেতু অনুসন্ধানে ডিডুপ্লিকেশন মেকানিজ়ম রয়েছ।
সেগমেন্টগুলি ভেক্টর স্টোরেজ, পেলোয়াড স্টোরেজ, ভেক্টর ইন্ডেক্স, পেলোয়াড ইন্ডেক্স, এবং একটি আইডি ম্যাপার রয়েছ যেখানে অভ্যন্তরীণ এবং বাইরের আইডি গুলির মধ্যে সম্পর্ক সংরক্ষণ করা হয়।
সেগমেন্টগুলি আপেন্ডাবল বা নন-আপেন্ডাবল হতে পারে যা স্টোরেজ এবং ইন্ডেক্সের একেবারে। আপেন্ডাবল সেগমেন্টগুলিতে আপেন্ড, মুছে নিয়ে এবং তথ্য অনুসন্ধান করা যায়, ভবিশ্যতে নন-আপেন্ডাবল সেগমেন্টগুলিতে কেবল তথ্য পড়া এবং মুছে নিয়ে যেতে পারে।
সংগ্রহে সেগমেন্টের কনফিগারেশন একে অপর থেকে ভিন্ন হতে পারে, তবে অন্তত একটি "আপেন্ডাবল" সেগমেন্ট প্রয়োজন হয়।
ভেক্টর স্টোরেজ
অ্যাপ্লিকেশনের প্রয়োজনীয়তা অনুযায়ী, Qdrant এ নিম্নলিখিত তথ্য সংরক্ষণের বিকল্পগুলি ব্যবহার করতে পারে। পছন্দ করার সিদ্ধান্ত অনুসন্ধান দ্রুততা এবং র্যাম ব্যবহারের মধ্যে বিতর্ক বিবেচনা করতে হবে।
মেমরি স্টোরেজ - সমস্ত ভেক্টরগুলি র্যামে সংরক্ষণ করে যায়, এটি পার্সিস্টেন্সের সময় ডিস্ক অ্যাক্সেস মাত্র প্রয়োজন করে।
মেমম্যাপ স্টোরেজ - ডিস্কে একটি ফাইলে সংযুক্ত করা ভার্চুয়াল ঠিকানা স্পেস তৈরি করে। ম্যাপ করা ফাইলগুলি প্রায় র্যামে না নিয়ো হয়, বরং পেজ ক্যাশিং ব্যবহার করে অ্যাক্সেস করা হয়। যথেষ্ট র্যাম থাকলে, এর গতি প্রায় মেমরি স্টোরেজের মত দ্রুত।
মেমম্যাপ স্টোরেজ কনফিগারেশন
মেম্যাপ (অভাবে ডিস্ক স্টোরেজের মধ্যে) ব্যবহারের কনফিগারেশনের দুটি উপায় রয়েছ:
- সংগ্রহ তৈরি এপিআই তে ভেক্টরের জন্য
on_diskঅপশন সেট করুন:
শুধুমাত্র v1.2.0 এবং উচ্চতর প্রযোজ্য
PUT /collections/{collection_name}
{
"vectors": {
"size": 768,
"distance": "Cosine",
"on_disk": true
}
}
এটি একটি সংগ্রহ তৈরি করবে যা তাত্ত্বিকভাবে সমস্ত ভেক্টর কে মেমম্যাপ স্টোরেজে সংরক্ষণ করবে। এটা সুপারিশকৃত হলে যখন Qdrant ইনস্ট্যান্স দ্রুত ডিস্ক ব্যবহার করে এবং প্রকারভেদের সাথে মোট সংগ্রহ নিয়ন্ত্রণ করতে হয়।
-
memmap_threshold_kbঅপশন সেট করুন। এই অপশনটি সেগমেন্টগুলি কে মেমম্যাপ স্টোরেজে রূপান্তর করার জন্য সীমা ঠিক করে।
এটি অনুমান করা যায়:
- কনফিগারেশন ফাইলে সীমা গ্লোবালভাবে সেট করুন। প্যারামিটার নামটি "মেমম্যাপ থ্রেশোল্ড_kb"।
- প্রতিটি সংগ্রহে আলাদা ভাবে থ্রেশোল্ড সেট করুন তৈরি অথবা আপডেট সময়।
PUT /collections/{collection_name}
{
"vectors": {
"size": 768,
"distance": "Cosine"
},
"optimizers_config": {
"memmap_threshold": 20000
}
}
মেমম্যাপ থ্রেশোল্ড প্যারামিটারের জন্য মৌলিক নিয়মটি খুব সহজ:
- যদি ব্যবহারের পরিদর্শন বিনিয়ামিত হয় - তবে, মেমম্যাপ থ্রেশোল্ডটি ইনডেক্সিং থ্রেশোল্ডের সাথে একই করুন (ডিফল্ট হলো 20000)। এই ক্ষেত্রে, অপটিমাইজার সমস্ত সীমা একত্রিত করা এবং একত্রিতভাবে সমস্ত সীমা অপ্টিমাইজ করবে।
- যদি লেখন লোড বেশি এবং রাম কম থাকে - তবে, মেমম্যাপ থ্রেশোল্ড ইনডেক্সিং থ্রেশোল্ডের নিচে সেট করুন, উদাহরণস্বরূপ, 10000। এই ক্ষেত্রে, অপটিমাইজার প্রথমে সেগমেন্টগুলি কে মেমম্যাপ স্টোরেজে রূপান্তর করবে এবং তারপর ইনডেক্সিং প্রয়োগ করবে।
এছাড়াও, ভেক্টর গুলিতে মাত্র নয়, আপনি এই ফিচার টি HNSW ইন্ডেক্সের জন্য মেমম্যাপ স্টোরেজ ব্যবহার করতে পারেন। এই ফিচার চালু করতে, সংগ্রহ তৈরি সময় hnsw_config.on_disk প্যারামিটারকে সত্য হিসেবে সেট করুন।
PUT /collections/{collection_name}
{
"vectors": {
"size": 768,
"distance": "Cosine"
},
"optimizers_config": {
"memmap_threshold": 20000
},
"hnsw_config": {
"on_disk": true
}
}
পেয়লোড স্টোরেজ
Qdrant দুই ধরণের পেয়লোড স্টোরেজ সমর্থন করে: InMemory এবং OnDisk।
InMemory পেয়লোড স্টোরেজ মেমোরির ভেক্টর এর মতো পেয়লোড উপাত্ত সংগ্রহিত করে। সেবা শুরু হওয়ার সময় ডেটা মেমোরি তে লোড করা হয়, আর ডিস্ক এবং RocksDB কেবল ধারণার জন্য ব্যবহৃত হয়। এ ধরণের স্টোরেজ খুব দ্রুত হলেও যদি পেয়লোডে বড় মানের মান থাকে (উদাহরণস্বরূপ টেক্সট সারসংক্ষেপ বা ছবি) তাহলে সমস্যা হতে পারে।
বড় পেয়লোড মান দরকার হলে অনুকূল হয় OnDisk পেয়লোড স্টোরেজ। এই ধরণের স্টোরেজ পেয়লোডকে নরমালভাবে RocksDB এ লিখে এবং পড়ে, তাই সম্ভাব্য মাত্রা মেমোরি প্রয়োজন হয় না। কিন্তু, প্রবল হিসাবে অ্যাক্সেস দেয়ার সমস্যা থাকে। যদি পেয়লোড শর্তাগুলির উপর ভেক্টর প্রশ্ন করতে হয়, তাহলে ডিস্কে সংরক্ষিত মান চেক করতে অনেক সময় লাগতে পারে। এই ক্ষেত্রে, ডিস্ক অ্যাক্সেস এর সহায়তা করার জন্য প্রতিটি মান ফিল্টারিং শর্ত ব্যবহার করে পেয়লোড ইনডেক্স তৈরি করাটি সুপারিশ করা হয়। একবার ফিল্ড ইন্ডেক্স তৈরি করা হয়, Qdrant সর্বদা সমস্থ রেখে দেবে ইন্ডেক্স ফিল্ডের সমস্থ মান, বিচারক দয়ান্তপূর্ণ থাকা কইর়ায়।
আপনি কালেকশন প্যারামিটার on_disk_payload ব্যবহার করে বা কনফিগারেশন ফাইল দিয়ে প্যালোড স্টোরেজের ধরণ নির্ধারণ করতে পারেন।
ভার্সন কন্ট্রোল
ডেটা সংক্রান্তিকতা নিশ্চিত করতে, Qdrant সমস্ত ডেটা পরিবর্তন দুই ধাপে পরিচালিত করে। প্রথমে, ডেটা রাইট-অ্হেড-লগ (WAL) তে লেখা হয়, যা সমস্ত অপারেশন জন্য ক্রমিক নম্বর বিন্যাস করে।
WAL এ পরিবর্তন যদি দেওয়া হয় তাহলে তা পাওয়ার পরিস্থিতিতে ও হারিয়ে না যায়। তারপরে, পরিবর্তনগুলি সেগমেন্টে প্রবেশ করে। প্রতিটি সেগমেন্ট তার উপরে প্রয়োগ করা সর্বশেষ সংস্করণ সংরক্ষণ করে, যেমনে প্রতিটি ব্যক্তিগত পয়েন্ট এর সংস্করণ। যদি একটি নতুন পরিবর্তনের ক্রমিক নম্বর একটি পয়েন্টের বর্তমান সংস্করণের চেয়ে কম হয়, তাহলে আপডেটার সেই পরিবর্তন বাদ দেবে। এই ব্যবস্থা Qdrant এর মাধ্যমে WAL থেকে স্টোরেজ প্রত্যাবর্তনের জন্য দক্ষতাপূর্ণভাবে আবার হয়।