স্টোরেজ কৌশল: ভালকি বনাম JSON বনাম NumPy

এই নিবন্ধটি ব্যাখ্যা করে কেন আমরা এসইও পাইপলাইন এবং সার্চ সার্ভিসে বিভিন্ন ধরনের ডেটার জন্য বিভিন্ন স্টোরেজ প্রযুক্তি ব্যবহার করি।

সমস্যা: একটি সমাধান সব ক্ষেত্রে প্রযোজ্য নয়

বিভিন্ন ডেটার বিভিন্ন অ্যাক্সেস প্যাটার্ন রয়েছে:

  • এমবেডিংস (5K x 384 ফ্লোট): দ্রুত ভেক্টর অপারেশনের প্রয়োজন (কোসাইন সাদৃশ্য)

  • ফ্রেজ ম্যাপিংস (2500+ ফ্রেজ): মানুষের সম্পাদনা, ভার্সন কন্ট্রোলের প্রয়োজন

  • কোয়েরি ক্যাশে (লাইভ কোয়েরি): দ্রুত কী-ভ্যালু লুকআপ, টিটিএল এক্সপায়ারেশনের প্রয়োজন

  • প্রোডাক্ট ডেটা (64K প্রোডাক্ট): স্ট্রাকচার্ড অ্যাক্সেস, কম্প্যাটিবিলিটি নিয়মের প্রয়োজন

সবার জন্য একই স্টোরেজ ব্যবহার করা অদক্ষ হবে।

তিনটি স্টোরেজ প্রযুক্তি

১. NumPy অ্যারেগুলো: ভেক্টর অপারেশন

ব্যবহারের ক্ষেত্র: এমবেডিংস (প্রোডাক্ট, কোয়েরি, ফ্রেজ)

কেন NumPy:

  • দ্রুত ভেক্টর গণনা: ম্যাট্রিক্স অপারেশনের জন্য অপটিমাইজড C/Fortran লাইব্রেরি

  • মেমরি-ম্যাপড ফাইল: RAM-এ কপি না করে বড় অ্যারে লোড করা

  • ব্যাচ অপারেশন: মিলিসেকেন্ডে হাজার হাজার ভেক্টর প্রক্রিয়াকরণ

  • স্ট্যান্ডার্ড ফরম্যাট: ML লাইব্রেরির সাথে সামঞ্জস্যপূর্ণ (scikit-learn, TensorFlow)

ফাইল ফরম্যাট: বাইনারি .npy ফাইল

লোডিং:

import numpy as np

# মেমরি-ম্যাপড (পুরো ফাইল RAM-এ লোড করে না)
embeddings = np.load('embeddings.npy', mmap_mode='r')

# কোসাইন সাদৃশ্য গণনা
from sklearn.metrics.pairwise import cosine_similarity
similarities = cosine_similarity(query_embedding, embeddings)

পারফরম্যান্স: রিয়েল-টাইম ইনফারেন্সের জন্য উপযুক্ত গতিতে ব্যাপক সাদৃশ্য অনুসন্ধান।

২. JSON ফাইল: মানুষের দ্বারা সম্পাদনযোগ্য ডেটা

ব্যবহারের ক্ষেত্র: কনফিগারেশন, ম্যাপিং, মেটাডেটা

কেন JSON:

  • মানুষের পাঠযোগ্য: পরিদর্শন ও ডিবাগ করা সহজ

  • ভার্সন কন্ট্রোল: Git diff ঠিক কী পরিবর্তিত হয়েছে তা দেখায়

  • ম্যানুয়াল সম্পাদনা: কোড ছাড়াই ত্রুটি ঠিক করা যায়

  • সর্বজনীন ফরম্যাট: প্রতিটি ভাষা JSON পার্স করতে পারে

আমরা কী সংরক্ষণ করি:

  • ফ্রেজ-টু-ফিল্টার ম্যাপিং: ফ্রেজ → ফিল্টার নিয়ম

  • প্রোডাক্ট বৈশিষ্ট্য: প্রোডাক্ট → ফিচার ডিকশনারি

  • কোয়েরি মেটাডেটা: কোয়েরি → ক্লিক, ইম্প্রেশন, উৎস

  • পাইপলাইন কনফিগারেশন: ধাপের প্যারামিটার, থ্রেশহোল্ড

ফাইল ফরম্যাট: টেক্সট .json ফাইল

লোডিং:

import json

with open('phrase_mappings.json') as f:
    mappings = json.load(f)

# ডেটা অ্যাক্সেস
filters = mappings['mini pc']  # ['form_factor:mini', 'category:pc']

৩. ভালকি (রেডিস): দ্রুত কী-ভ্যালু ক্যাশে

ব্যবহারের ক্ষেত্র: লাইভ সার্চ, অটোকমপ্লিট, জনপ্রিয় কোয়েরি

কেন ভালকি:

  • ইন-মেমরি: লুকআপের জন্য মাইক্রোসেকেন্ড লেটেন্সি

  • রেডিসার্চ: ইনডেক্স সহ ভেক্টর সাদৃশ্য অনুসন্ধান

  • টিটিএল এক্সপায়ারেশন: স্বয়ংক্রিয় ক্যাশে অকার্যকরকরণ

  • পাব/সাব: সার্ভার জুড়ে রিয়েল-টাইম আপডেট

  • স্থায়িত্ব: স্থায়িত্বের জন্য ঐচ্ছিক ডিস্ক স্ন্যাপশট

আমরা কী সংরক্ষণ করি:

  • কোয়েরি এমবেডিংস ক্যাশে: সাম্প্রতিক কোয়েরি → এমবেডিংস

  • জনপ্রিয় কোয়েরি: ট্রাফিক অনুযায়ী শীর্ষ 1000 কোয়েরি

  • অটোকমপ্লিট ইনডেক্স: প্রিফিক্স → কোয়েরি পরামর্শ

  • ফিল্টার এক্সট্রাকশন ক্যাশে: কোয়েরি → নিষ্কাশিত ফিল্টার

  • সম্পর্কিত অনুসন্ধান ক্যাশে: কোয়েরি → সম্পর্কিত কোয়েরি

ডেটা স্ট্রাকচার:

  • স্ট্রিং: সাধারণ কী-ভ্যালু (কোয়েরি → এমবেডিং)

  • সর্টেড সেট: র্যাঙ্ক করা ডেটা (স্কোর অনুযায়ী জনপ্রিয় কোয়েরি)

  • রেডিসার্চ ইনডেক্স: ভেক্টর সাদৃশ্য অনুসন্ধান

  • হ্যাশ: স্ট্রাকচার্ড ডেটা (কোয়েরি মেটাডেটা)

লোডিং:

from app.shared.valkey_cache import get_valkey

valkey = get_valkey()
# ... (বাস্তবায়নের বিবরণ বাদ দেওয়া হয়েছে)

সিদ্ধান্ত ম্যাট্রিক্স

কখন NumPy ব্যবহার করবেন

মাপকাঠি:

  • ডেটা সংখ্যাসূচক (ফ্লোট, ইন্ট)

  • দ্রুত ভেক্টর অপারেশনের প্রয়োজন (ডট প্রোডাক্ট, কোসাইন সাদৃশ্য)

  • ডেটা পড়া-ভারী (বিরল আপডেট)

  • ডেটা বড় (লক্ষ লক্ষ সংখ্যা)

  • ব্যাচ প্রসেসিং (একবারে অনেক আইটেম প্রক্রিয়াকরণ)

উদাহরণ:

  • এমবেডিংস (প্রোডাক্ট, কোয়েরি, ফ্রেজ)

  • ফিচার ভেক্টর

  • সাদৃশ্য ম্যাট্রিক্স

কখন JSON ব্যবহার করবেন

মাপকাঠি:

  • ডেটা স্ট্রাকচার্ড (অবজেক্ট, অ্যারে)

  • মানুষের পাঠযোগ্যতার প্রয়োজন

  • ভার্সন কন্ট্রোলের প্রয়োজন (Git)

  • ডেটা মাঝে মাঝে পরিবর্তিত হয় (ম্যানুয়াল সম্পাদনা)

  • ডেটা ছোট-মাঝারি (<100 MB)

উদাহরণ:

  • কনফিগারেশন ফাইল

  • ফ্রেজ ম্যাপিং

  • প্রোডাক্ট মেটাডেটা

  • পাইপলাইন প্যারামিটার

কখন ভালকি ব্যবহার করবেন

মাপকাঠি:

  • দ্রুত লুকআপের প্রয়োজন (মাইক্রোসেকেন্ড)

  • ডেটা ঘন ঘন পরিবর্তিত হয় (লাইভ কোয়েরি)

  • টিটিএল এক্সপায়ারেশনের প্রয়োজন (ক্যাশে অকার্যকরকরণ)

  • পাব/সাবের প্রয়োজন (রিয়েল-টাইম আপডেট)

  • ভেক্টর সার্চের প্রয়োজন (রেডিসার্চ)

উদাহরণ:

  • কোয়েরি ক্যাশে

  • অটোকমপ্লিট

  • জনপ্রিয় কোয়েরি

  • সেশন ডেটা

  • রেট লিমিটিং

হাইব্রিড পদ্ধতি

আমরা সর্বোত্তম পারফরম্যান্সের জন্য তিনটিই একত্রিত করি:

পাইপলাইন (অফলাইন প্রসেসিং)

NumPy: এমবেডিং, সাদৃশ্য ম্যাট্রিক্স গণনা

JSON: ম্যাপিং, মেটাডেটা, কনফিগারেশন সংরক্ষণ

ভালকি: ব্যবহার করা হয় না (পাইপলাইন অফলাইনে চলে)

সার্চ সার্ভিস (লাইভ কোয়েরি)

NumPy: ডিস্ক থেকে এমবেডিং লোড (মেমরি-ম্যাপড)

JSON: ডিস্ক থেকে ম্যাপিং লোড (মেমরিতে ক্যাশ করা)

ভালকি: লাইভ কোয়েরি, অটোকমপ্লিট, জনপ্রিয় কোয়েরি ক্যাশে

ডেটা ফ্লো

graph LR
    Pipeline[SEO Pipeline
অফলাইন] subgraph Storage NP[NumPy ফাইল
embeddings.npy] JS[JSON ফাইল
mappings.json] end Search[সার্চ সার্ভিস
লাইভ] VK[ভালকি
ক্যাশে] Pipeline --> NP Pipeline --> JS NP --> Search JS --> Search Search --> VK VK --> Search

পারফরম্যান্স তুলনা

NumPy (মেমরি-ম্যাপড):

  • লোড সময়: তাত্ক্ষণিক (ভার্চুয়াল মেমরিতে জিরো-কপি ম্যাপিং)

  • লুকআপ সময়: প্রায় শূন্য (অ্যারে ইনডেক্সে সরাসরি CPU পয়েন্টার)

  • মেমরি: ন্যূনতম (OS-পরিচালিত পেজ ক্যাশে, প্রসেস RAM-এ থাকে না)

JSON:

  • লোড সময়: উচ্চ লেটেন্সি (সিকোয়েন্সিয়াল পার্সিং এবং অবজেক্ট ইনস্ট্যান্টিয়েশন)

  • লুকআপ সময়: দক্ষ (স্ট্যান্ডার্ড হ্যাশ ম্যাপ ওভারহেড)

  • মেমরি: যথেষ্ট (পুরো সিরিয়ালাইজড স্ট্রাকচার হিপে থাকে)

ভালকি:

  • লোড সময়: স্থায়ী (ব্যাকগ্রাউন্ড সার্ভিসে অবস্থিত)

  • লুকআপ সময়: মধ্যম (নেটওয়ার্ক রাউন্ড-ট্রিপ এবং প্রোটোকল সিরিয়ালাইজেশন অন্তর্ভুক্ত)

  • মেমরি: বহিরাগত (ডাটাবেস প্রসেসের মধ্যে বিচ্ছিন্ন)

বিজয়ী: উচ্চ-থ্রুপুট ব্যাচিংয়ের জন্য NumPy, বিতরণিত একক-কী অ্যাক্সেসের জন্য ভালকি

ভেক্টর সাদৃশ্য অনুসন্ধান

NumPy (cosine_similarity):

  • ব্যাচ অপারেশন: দ্রুত (SIMD/ভেক্টরাইজড লিনিয়ার বীজগণিতের মাধ্যমে অপটিমাইজড)

  • সমান্তরালযোগ্য: উচ্চ (সমস্ত উপলব্ধ ফিজিক্যাল CPU কোর জুড়ে স্কেল করে)

  • মেমরি: রৈখিক (এমবেডিং মাত্রার সাথে সরাসরি স্কেল করে)

ভালকি (রেডিসার্চ):

  • অনুসন্ধান গতি: উচ্চতর (বিশেষায়িত HNSW/ভেক্টর ইন্ডেক্সিং ব্যবহার করে)

  • সমান্তরালযোগ্য: সীমিত (ইঞ্জিনের থ্রেডিং মডেল দ্বারা সীমাবদ্ধ)

  • মেমরি: নিবিড় (কাঁচা এমবেডিং প্লাস ইন্ডেক্সিং মেটাডেটা প্রয়োজন)

বিজয়ী: উপ-উপলব্ধি লাইভ সার্চের জন্য ভালকি, ভারী অফলাইন বিশ্লেষণাত্মক প্রসেসিংয়ের জন্য NumPy

কনফিগারেশন লুকআপ

JSON:

  • লোড সময়: পরিবর্তনশীল (কনফিগারেশন জটিলতার সমানুপাতিক)

  • লুকআপ সময়: দ্রুত (নেটিভ ডিকশনারি অ্যাক্সেস)

  • সম্পাদনা সময়: ঘর্ষণহীন (মানুষের পাঠযোগ্য টেক্সট পরিবর্তন)

ভালকি:

  • লোড সময়: তাৎক্ষণিক (সংযোগে সক্রিয়)

  • লুকআপ সময়: নেটওয়ার্ক-বাউন্ড (অনুরোধের ওভারহেডের উপর নির্ভরশীল)

  • সম্পাদনা সময়: প্রোগ্রাম্যাটিক (CLI বা ক্লায়েন্ট SET কমান্ডের প্রয়োজন)

বিজয়ী: স্ট্যাটিক কনফিগারেশনের জন্য JSON, ডায়নামিক শেয়ার্ড স্টেটের জন্য ভালকি

তথ্যসূত্র

প্রযুক্তি

  • NumPy - অ্যারে কম্পিউটিং লাইব্রেরি

  • JSON - ডেটা ইন্টারচেঞ্জ ফরম্যাট

  • ভালকি - ইন-মেমরি ডেটা স্টোর (রেডিস ফর্ক)

  • রেডিসার্চ - ভেক্টর সার্চ মডিউল

প্রযুক্তিগত ধারণা

সম্পর্কিত নিবন্ধ

সারসংক্ষেপ

আমরা বিভিন্ন ব্যবহারের ক্ষেত্রের জন্য অপটিমাইজ করা তিনটি স্টোরেজ প্রযুক্তি ব্যবহার করি:

NumPy (এমবেডিংস):

  • দ্রুত ভেক্টর অপারেশন (কোসাইন সাদৃশ্য)

  • মেমরি-ম্যাপড

  • ব্যাচ প্রসেসিং

  • স্ট্যান্ডার্ড ML ফরম্যাট

JSON (কনফিগারেশন):

  • মানুষের পাঠযোগ্য (সহজ ডিবাগিং)

  • ভার্সন কন্ট্রোল (Git diffs)

  • ম্যানুয়াল সম্পাদনা (কোডের প্রয়োজন নেই)

  • সর্বজনীন ফরম্যাট

ভালকি (লাইভ ক্যাশে):

  • দ্রুত লুকআপ (মাইক্রোসেকেন্ড)

  • ভেক্টর সার্চ (রেডিসার্চ)

  • টিটিএল এক্সপায়ারেশন (স্বয়ংক্রিয় অকার্যকরকরণ)

  • পাব/সাব (রিয়েল-টাইম আপডেট)

হাইব্রিড পদ্ধতি: প্রতিটি কাজের জন্য সঠিক টুল ব্যবহার করুন, সর্বোত্তম পারফরম্যান্সের জন্য একত্রিত করুন।


← ডকুমেন্টেশন ইনডেক্সে ফিরে যান