کولیکشن

Qdrant ویکٹر ڈیٹا بیس میں کولیکشنز کا تصور MYSQL میں جدول ساخت کے مترادف ہوسکتا ہے، جو ایک ہی قسم کے ویکٹر ڈیٹا کو یکساں طریقے سے ذخیرہ کرنے کے لئے استعمال ہوتا ہے۔ کولیکشن میں ہر ایک ڈیٹا کو "point" کی طرح اشارہ کیا گیا ہے۔ یہاں، ایک پوائنٹ ریاضیاتی جئومیٹرک خلا کا تصور کے مترادف ہے، جو جئومیٹرک خلا میں ایک ویکٹر کا تصور (بس اسے ایک ڈیٹا کے طور پر سمجھ لیں) پیش کرتا ہے۔

ایک ہی کولیکشن میں ہر پوائنٹ کا ویکٹر ایک ہی ابعاد رکھنا چاہئے اور ایک ہی میٹرک کا استعمال کرکے موازنہ کیا جانا چاہئے۔ نامک جیسے ویکٹرز کو ایک ہی پوائنٹ میں شامل کرنے کے لئے، ہر ویکٹر کو اس کے اپنے ابعاد اور میٹرک کی ضروریات ہوتی ہیں۔

دوری میٹرکس ویکٹرز کے درمیان مماثلت کا پیمانہ لینے کے لئے استعمال ہوتے ہیں۔ میٹرک کا انتخاب ویکٹر کیسے حاصل کیا گیا ہے پر منحصر ہوتا ہے، خاص طور پر نیورل نیٹ ورک انکوڈرز کی تربیت کے لیے استعمال کردہ طریقہ پر۔

Qdrant مندرجہ ذیل مقبول قسم کی میٹرکس کی حمایت کرتا ہے:

  • ڈاٹ پروڈکٹ: ڈاٹ
  • کوسائن مماثلت: کوسائن
  • یورکلیدین فاصلہ: یورکلیڈ

تلاش کی کارکردگی کو بہتر کرنے کے لئے، کوسائن مماثلت سادہ ویکٹرز کا ڈاٹ پروڈکٹ لینے سے حاصل کی جاتی ہے۔ اپ لوڈ کے دوران، ویکٹرز خود بخود نارملائز ہوجاتے ہیں۔ میٹرکس اور ویکٹر سائزوں کے علاوہ، ہر کولیکشن کو کولیکشن کی بہتری، انڈیکس تشکیل اور صفائی کو نگارش کرنے کے لئے اپنے اپنے پیرامیٹرز کا استعمال کرتا ہے۔ یہ ترتیبات مطلوبہ وقت پر متعین کی جا سکتی ہیں۔

متعدد تنظیم قائم کرنا

کتنی کولیکشنز کا قیام کیا جانا چاہئے؟ اکثر صورتوں میں، آپ کو بص payload-based partitioning کے ساتھ ایک ہی کولیکشن کا استعمال کرنا ہوتا ہے۔ یہ ترتیب متعدد تنظیم کے طور پر جانا جاتا ہے۔ بہت سے صارفین کے لئے، یہ کارروائی موثر ہے لیکن اضافی تشکیل کی ضرورت ہوتی ہے۔ متعدد تنظیم قائم کرنے کا طریقہ سیکھیں۔

کب متعدد کولیکشنز قائم کیا جانا چاہئے؟ جب آپ کے پاس محدود تعداد میں صارفین ہوں اور علیحدگی کی ضرورت ہوتی ہے۔ یہ ترتیب زیادہ موزون ہوتی ہے لیکن زیادہ مہنگی بھی ہوسکتی ہے، کیونکہ بڑی تعداد میں کولیکشنز قائم کرنے سے وسائل کی زیادہ بوجھ سے وابستہ ہوسکتا ہے۔ علاوہ اس کے، آپ کو یہ بھی یقینی بنانا چاہئے کہ یہ ایک دوسرے سے کسی طرح میں، خاص طور پر کارکردگی کے پہلو میں مداخلت نہ کریں۔

کولیکشن تخلیق کرنا

PUT /collections/{collection_name}

{
    "vectors": {
      "size": 300,
      "distance": "Cosine"
    }
}

ضروری اختیارات کے علاوہ، مندرجہ ذیل کولیکشن اختیارات کے لئے کسٹم اقدامات بھی مخصوص کیے جا سکتے ہیں:

  • hnsw_config - انڈیکس تفصیلات کے لئے، انڈیکس سیکشن کو دیکھیں۔
  • wal_config - رائیٹ-اہیڈ لاگنگ سے متعلق تشکیل۔ وائرٹ ایڈیشنل وقت کی معلومات کے لئے، براہ کرم اس پر رجوع کریں۔
  • optimizers_config - اوپٹیمائزر تفصیلات کے لئے، اوپٹیمائزر سیکشن کو دیکھیں۔
  • shard_number - کولیکشن کو کتنی شارٹس ہونی چاہئیں گی۔ مزید معلومات کے لئے، براہ کرم ڈسٹریبیوٹڈ اسٹیبلشمنٹ سیکشن پر رجوع کریں۔
  • on_disk_payload - پے لوڈ ڈیٹا کو ذخیرہ کرنے کی جگہ کا تعین کرتا ہے۔ اگر ٹرُو پر سیٹ ہوا ہو، تو یہ صرف ڈسک پر پے لوڈ کو ذخیرہ کرے گا۔ یہ بڑے پے لوڈ کے ساتھ کام کرتے وقت ریم استعمال کی حد میں نہایت مفید ثابت ہوسکتا ہے۔
  • quantization_config - قَص بَندی کے تفصیلات کے لئے، قانون کی تفصیلات کو دیکھیں۔

اختیاری کولیکشن پیرامیٹرز کے پہلے سے مقررہ پیرامیٹرز کو [تشکیل کی فائل](https://github.com/qdrant/qdrant/blob/master/config/config.yaml) میں تعین کیا گیا ہے۔

کولیکشن اور ویکٹر پیرامیٹرز کی مزید معلومات کے لئے، براہ کرم schema definition اور [تشکیل کی فائل](https://github.com/qdrant/qdrant/blob/master/config/config.yaml) دیکھیں۔

ویکٹرز ریم میں ذخیرہ کرنے کے لئے راپ بہت تیز رسائی حاصل کرنے کے لئے ریم میں ذخیرہ کیا جاتا ہے۔ on_disk پیرامیٹر ویکٹر تشکیل میں سیٹ کرنا ممکن ہے۔ اگر ٹرُو پر سیٹ ہو، تو تمام ویکٹرز ڈسک پر ذخیرہ ہوں گے۔ یہ بڑے حجم کے ڈیٹا کو درآمد کرنے کے لئے مناسب ہوگا۔

ایک دوسرے کولیکشن سے کولیکشن تخلیق کرنا

ویٹیبل مام v1.0.0

ایک موجودہ کولیکشن سے ایک نئی کولیکشن کو شروع کیا جا سکتا ہے۔

یہی کام فرق اوراق کی مختلف ترتیبات کو جلدی سے آزمانے کے لیے مفید ہوسکتا ہے۔

نئی کولیکشن میں ویکٹر تشکیل کرتے وقت، یہ یقینی بنائیں کہ ویکٹرز اصل کولیکشن میں کی طرح ہی ابعاد اور فاصلہ کی وظیفہ ہوں۔

PUT /collections/{collection_name}

{
    "vectors": {
      "size": 300,
      "distance": "Cosine"
    },
    "init_from": {
       "collection": {from_collection_name}
    }
}

متعدد سمتی جمع

  • v0.10.0 سے دستیاب ہے *

ہر ریکارڈ میں متعدد ویکٹرز ہوسکتے ہیں۔ یہ خصوصیت مختلف ویکٹروں کو ایک جمع میں ذخیرہ کرنے کی اجازت دیتی ہے۔ ویکٹرز کو ریکارڈ کے اندر مختلف کرنے کے لئے، جب جمع بناتے وقت ان کے منفرد نام تعین کریں۔ اس سکیما کے تحت ہر نامزد ویکٹر اپنا خود کا فاصلہ اور سائز رکھتا ہے:

PUT /collections/{collection_name}

{
    "vectors": {
        "image": {
            "size": 4,
            "distance": "Dot"
        },
        "text": {
            "size": 8,
            "distance": "Cosine"
        }
    }
}

کچھ خاص معاملات کے لئے، بغیر ویکٹر ذخیرہ کی جانے والی جمع بھی بنائی جا سکتی ہے۔

  • v1.1.1 سے دستیاب ہے *

ہر نامزد ویکٹر کے لئے، آپ اختیاری طور پر hnsw_config یا quantization_config بھی مخصوص کرسکتے ہیں تاکہ انہیں جمع کے ترتیب سے ہٹا سکیں۔ یہ ویکٹر سطح پر تلاش کاری کی کارکردگی کو بہتر بنانے کے لئے استعمال کیا جا سکتا ہے۔

  • v1.2.0 سے دستیاب ہے *

ویکٹرز کو تیز رسائی کیلئے میموری میں ذخیرہ کیا جاتا ہے۔ ہر ویکٹر کے لئے، on_disk کو true چننا کرکے ہمیشہ تمام ویکٹروں کو برقرار رکھنے کے لئے ڈسک پر ذخیرہ کیا جا سکتا ہے۔ یہ میموری میپنگ کو فعال کرتا ہے، جو بڑی مقدار کے ڈیٹا کو داخل کرنے کے لئے مناسب ہے۔

جمع کردہ مواد کو ہٹانا

DELETE /collections/{collection_name}

جمع پیرامیٹر اپ ڈیٹ

ڈائنامک پیرامیٹر اپ ڈیٹس ایکسپنشلوں پر مددگار ہوسکتے ہیں، مثلاً ویکٹروں کے بہتر ابتدائی لوڈنگ کیلئے۔ مثبت بندوقراری کے دوران انڈیکسنگ کو غیر فعال کرکے اور اس کے بعد فوراً فعال کرنے کیسے۔ اس طریقے سے، آپ نے انڈیکس دوبارہ تعمیر کرنے کے لئے ذیادہ محنت کے استعمال سے بچ سکتے ہیں۔

مثال کے طور پر، مندرجہ ذیل کمانڈ ایک سیگمنٹ کے لئے میں ان ڈیکسنگ کو فعال کرتی ہے جس میں ویکٹروں کی سائز سو کلو باٹ سے زیادہ ہوتی ہے:

PATCH /collections/{collection_name}

{
    "optimizers_config": {
        "indexing_threshold": 10000
    }
}

مندرجہ ذیل پیرامیٹرز اپ ڈیٹ کیے جا سکتے ہیں:

  • optimizers_config - اوپٹمائزرز کی تفصیلات دیکھیں
  • hnsw_config - انڈیکس کی تفصیلات دیکھیں
  • quantization_config - پیمائش کی تفصیلات دیکھیں
  • vectors - خصوصی ویکٹروں کے سیٹنگز کی تشکیل، جن میں ان کے مخصوص hnsw_config، quantization_config، اور on_disk شامل ہیں۔
  • params - دیگر جمع پیرامیٹرز، جن میں write_consistency_factor اور on_disk_payload شامل ہیں۔

مکمل API مواصفات اصطلاح کی تعریفوں میں موجود ہیں۔

  • v1.4.0 سے دستیاب ہے *

Qdrant 1.4 میں جمع پیرامیٹرز کو رن ٹائم پر اپ ڈیٹ کرنے کا اضافہ کیا گیا ہے۔ HNSW انڈیکس، پیمائش، اور ڈسک کی ترتیب کو ڈوبارہ تعین کرنے کا عمل بنائی گئی جمع کے بغیر ہی کیا جا سکتا ہے۔ سیگمنٹس (انڈیکس اور پیمائش ڈیٹا کے ساتھ) خود بخود پیش منظر میں ترتیب بنائیں گے تاکہ اپ ڈیٹ کردہ پیرامیٹرز کے ساتھ ملاپ ہوسکے۔

مندرجہ ذیل مثال میں، پورے جمع اور my_vector کے لئے HNSW انڈیکس اور پیمائش پیرامیٹرز کو اپ ڈیٹ کیا گیا ہے:

PATCH /collections/{collection_name}

{
    "vectors": {
        "my_vector": {
            "hnsw_config": {
                "m": 32,
                "ef_construct": 123
            },
            "quantization_config": {
                "product": {
                    "compression": "x32",
                    "always_ram": true
                }
            },
            "on_disk": true
        }
    },
    "hnsw_config": {
        "ef_construct": 123
    },
    "quantization_config": {
        "scalar": {
            "type": "int8",
            "quantile": 0.8,
            "always_ram": false
        }
    }
}

نوٹ: بغیر نامزد ویکٹر کے ایک جمع میں ویکٹر پیرامیٹرز کو اپ ڈیٹ کرنے کیلئے، ایمپٹی ("") نام استعمال کیا جا سکتا ہے۔

اس انڈ پوائنٹ کو روک سکتا ہے کیونکہ یہ موجودہ اوپٹمائزر کو مکمل ہونے کا انتظار کرتا ہے۔ ہم اس خصوصیت کا استعمال ایک پروڈکشن ڈیٹا بیس میں نہیں تجویز کرتے ہیں کیونکہ انڈیکس دوبارہ تعمیر کرنا وزنی ذراع کا وجود ڈال سکتا ہے۔

مواد جمع کرنے کی معلومات

Qdrant کو موجودہ کلیکشن کے تشخیصی پیرامیٹر معلوم کرنے کی اجازت ہے تاکہ نقاط کی تقسیم اور انڈیکسنگ کی صورتحال کو بہتر طریقے سے سمجھا جا سکے۔

GET /collections/{collection_name}

{
    "result": {
        "status": "green",
        "optimizer_status": "ok",
        "vectors_count": 1068786,
        "indexed_vectors_count": 1024232,
        "points_count": 1068786,
        "segments_count": 31,
        "config": {
            "params": {
                "vectors": {
                    "size": 384,
                    "distance": "Cosine"
                },
                "shard_number": 1,
                "replication_factor": 1,
                "write_consistency_factor": 1,
                "on_disk_payload": false
            },
            "hnsw_config": {
                "m": 16,
                "ef_construct": 100,
                "full_scan_threshold": 10000,
                "max_indexing_threads": 0
            },
            "optimizer_config": {
                "deleted_threshold": 0.2,
                "vacuum_min_vector_number": 1000,
                "default_segment_number": 0,
                "max_segment_size": null,
                "memmap_threshold": null,
                "indexing_threshold": 20000,
                "flush_interval_sec": 5,
                "max_optimization_threads": 1
            },
            "wal_config": {
                "wal_capacity_mb": 32,
                "wal_segments_ahead": 0
            }
        },
        "payload_schema": {}
    },
    "status": "ok",
    "time": 0.00010143
}

اگر ویکٹرز کو کلیکشن میں داخل کیا گیا ہے تو، status فیلڈ زارع کاری کے دوران "yellow" ہو سکتا ہے اور جب تمام نقطے کامیابی سے پروسیس ہو جائیں تو "green" ہو جائے گا۔

ممکن ہے کہ مندرجہ ذیل رنگ حالات سے مواجہ ہوں:

  • ? green: کلیکشن تیار ہے
  • ? yellow: کلیکشن بحرانی حالت میں ہے
  • ? red: انجن ناقابل بحالی خطا سے گزر رہا ہے۔

دوسرے دلچسپ خصوصیات میں سے کچھ شامل ہیں:

  • points_count - کل شے (ویکٹرز اور ان کے لوڈوں) کی تعداد
  • vectors_count - کل ویکٹرز کی تعداد۔ اگر ہر شے میں متعدد ویکٹر ہوں، تو یہ points_count کے برابر نہیں ہو سکتا ہے۔
  • indexed_vectors_count - ایچ این ایس ڈبن کی انڈیکس میں ذخیرہ شدہ کل ویکٹرز کی تعداد۔ Qdrant تمام ویکٹرز کو انڈیکس میں ذخیرہ نہیں کرتا، صرف انہیں جو دی گئی تشخیص کے مطابق انڈیکس سیگمنٹس پیدا کر سکتے ہیں۔

HNSW میں ویکٹرز کی انڈیکسنگ

کچھ صورتوں میں آپ کو یہ معلوم ہو سکتا ہے کہ indexed_vectors_count کی قیمت vectors_count سے کم ہے۔ یہ معمولی رویہ ہے جو انڈیکسنگر کی تشکیل پر موقع کے مطابق ہوتا ہے۔ اگر غیر انڈیکس ویکٹرز کا سائز indexing_threshold (کلوبائٹس میں) کو پار کرے تو ایک نیا انڈیکس سیگمنٹ بنایا جائے گا۔ اگر آپ کا کلیکشن بہت چھوٹا ہو یا ویکٹر کی بعد کم ہو تو HNSW سیگمنٹس پیدا نہیں ہو سکتے ہیں، اور indexed_vectors_count صفر ہو سکتا ہے۔

آپ موجودہ کلیکشن میں نیا انڈیکس سیگمنٹ بنانے کے لئے کلیکشن پیرامیٹرز میں indexing_threshold کی قیمت کم کر سکتے ہیں۔

کلیکشن علیاس

ایک پروڈکشن ماحول میں، ویکٹرز کے مختلف ورژنز کے درمیان بہتر دھارے سے سوئچ کرنے کی ضرورت ہو سکتی ہے، جیسے نئے ورژن کی نیورل نیٹ ورکس کی طرف اپ گریڈ کرنا۔

ان معاملات میں، ممکن نہ ہو کہ خدمات روکیں اور نئے ویکٹرز کا استعمال کرتے ہوئے کلکشن کو دوبارہ تعمیر کرنا۔ علیاس ایک موجودہ کلیکشن کے لئے اضافی نام ہے۔ تفتیش میں علیاس استعمال کر کے کلیکشن نام کی بجائے مکمل طور پر قائم کی جا سکتی ہے۔

اسی لئے، دوسری کلیکشن پیچھے پساڈا جا سکتی ہے، اور پھر علیاس کو پرانی کلیکشن سے نئی کلیکشن پر سوئچ کیا جا سکتا ہے۔ علیاس تبدیلیاں اتمی ہوتی ہیں، اور سوئچنگ پروسیس کے دوران متعدد درخواستیں متاثر نہیں ہوتیں۔

علیاس تخلیق

POST /collections/aliases

{
    "actions": [
        {
            "create_alias": {
                "alias_name": "production_collection",
                "collection_name": "example_collection"
            }
        }
    ]
}

علیاس کو حذف کریں

POST /collections/aliases

{
    "actions": [
        {
            "delete_alias": {
                "alias_name": "production_collection"
            }
        }
    ]
}

کلیکشن سوئچ

متعدد علیاس عملیات ایک ایٹمی طور پر کارروائی کی جا سکتی ہیں۔ مثلاً، آپ نیچے دی گئی کمانڈ کا استعمال کر کے زیریں کلیکشن کو سوئچ کر سکتے ہیں۔

POST /collections/aliases

{
    "actions": [
        {
            "delete_alias": {
                "alias_name": "production_collection"
            }
        },
        {
            "create_alias": {
                "alias_name": "production_collection",
                "collection_name": "new_collection"
            }
        }
    ]
}

لسٹ کلیکشن علامات

GET /collections/{collection_name}/aliases

سب علامات کی فہرست دیکھیں

GET /aliases

سب کلیکشنز کی فہرست دیکھیں

GET /collections