Dasturlash

Header‑only C kutubxonasi: Ko'p‑o'lchamli vektor ma'lumotlar bazasini yaratish va qidirish

7-mart, 2026, 10:117 ko'rish3 daqiqa o'qish
Header‑only C kutubxonasi: Ko'p‑o'lchamli vektor ma'lumotlar bazasini yaratish va qidirish

Sun'iy intellekt va mashina o'rganish sohalarida ko'p‑o'lchamli vektor embeddinglari muhim rol o'ynaydi. Ushbu embeddinglarni samarali saqlash, izlash va boshqarish uchun maxsus ma'lumotlar bazasi kerak bo'ladi. Yaqinda chiqgan header‑only C kutubxonasi bu muammoni oddiy, tez va kengaytiriladigan yechim bilan hal qiladi.

Kutubxonaning asosiy xususiyatlari

  • Header‑only arxitektura – bitta vdb.h faylini loyihaga qo'shish kifoya, alohida kutubxonani yig'ish shart emas.
  • Ko'p o'lchamli vektorlar – har bir vektor 128, 256 yoki istalgan o'lchamda bo'lishi mumkin.
  • Uchta masofa mezoni: kosinus, Evklid (L2) va nuqtaviy ko'paytma (dot product).
  • Ko'p iplikli (multithreaded) qo'llab‑quvvatlash#define VDB_MULTITHREADED bilan yoqiladi, barcha operatsiyalar o'qish‑yozish qulfidan foydalangan holda xavfsiz bajariladi.
  • Diskka saqlash / yuklash – ma'lumotlar bazasini .vdb formatida faylga yozish va qayta yuklash imkoniyati.
  • Maxsus xotira ajratish – foydalanuvchi o'z malloc/free funksiyalarini belgilashi mumkin.
  • Hech qanday tashqi bog'liqlik yo'q – faqat pthreads (ko'p iplikli rejimda) talab qilinadi.
  • Python bog'lanishivdb.py orqali C kutubxonasini Python dasturidan chaqirish mumkin.

Qanday ishlaydi?

Kutubxona vdb_database strukturasini yaratadi, unda vektorlar, ularning identifikatorlari (ID) va ixtiyoriy metadata saqlanadi. Vektor qo'shish, o'chirish, qidirish va ma'lumotlarni faylga yozish funksiyalari bir-biriga yaqin C API orqali taqdim etiladi.

#include "vdb.h"
int main(void) {
    vdb_database *db = vdb_create(128, VDB_METRIC_COSINE);
    float vec[128] = { /* ... */ };
    vdb_add_vector(db, vec, "vec1", NULL);
    float query[128] = { /* ... */ };
    vdb_result_set *res = vdb_search(db, query, 5);
    vdb_free_result_set(res);
    vdb_destroy(db);
    return 0;
}

Yuqoridagi kodda 128 o'lchamli kosinus masofasi bo'yicha vektor bazasi yaratiladi, bir vektor qo'shiladi, so'ngra 5 ta eng yaqin qo'shni topiladi.

Ko'p iplikli rejim qanday ishlaydi?

Ko'p iplikli rejimda barcha operatsiyalar read‑write lock yordamida sinxronlanadi:

  • Bir nechta iplar bir vaqtning o'zida qidiruv (read) bajarishi mumkin.
  • Qo'shish yoki o'chirish (write) operatsiyalari eksklyuziv bo'lib, boshqa iplar kutadi.

Bu dizayn dasturchilarga qo'shimcha qulf kodini yozmasdan, yuqori samaradorlikka erishish imkonini beradi.

Saqlash formatining tuzilishi

Ma'lumotlar bazasi binar formatda 0x56444230 ("VDB0") magic raqami bilan boshlanadi. Sarlavhada o'lcham, vektorlar soni va tanlangan masofa mezoni saqlanadi. Har bir vektor uchun float massiv, ID uzunligi va ID matni ketma‑ketik yoziladi. Metadata esa faylga yozilmaydi, lekin xotirada mavjud bo'ladi.

Nega bu kutubxona foydali?

1️⃣ Yengillik – bitta fayl, hech qanday dinamik kutubxona kerak emas. 2️⃣ Samaradorlik – k‑yaqin qo'shnilar qidiruvi O(N) vaqt ichida amalga oshadi, lekin kichik ma'lumotlar bazalari uchun bu yetarli. 3️⃣ Moslashuvchanlik – C, C++, Python kabi tillarda ishlatish mumkin.

AI dasturlarida, tavsiya tizimlarida yoki tasvir tanishuvda vektor embeddinglarini tezkor qidirish zarur bo'lganda, ushbu kutubxona kichik yoki o'rta hajmdagi loyihalar uchun ideal tanlovdir.

Qisqa xulosa

Header‑only C vektor ma'lumotlar bazasi kutubxonasi, o'zining sodda API, ko'p o'lchamli vektorlarni qo‘llab‑quvvatlashi, ko'p iplikli xavfsizligi va Python bog‘lanishi bilan dasturchilarga qulay, tez va kengaytiriladigan yechim taklif etadi. Litsenziyasi Apache 2.0 bo‘lgani sababli, ochiq manba hamjamiyati tomonidan erkin foydalanish va takomillashtirish mumkin.

Manba: Hacker News
#C #vektor bazasi #header-only #multithreading #AI
Telegram da muhokama qilish