சேமிப்பு உத்தி: வால்கீ vs JSON vs நம்பை

இந்த கட்டுரை SEO பைப்லைன் மற்றும் தேடல் சேவை ஆகியவற்றில் வெவ்வேறு வகையான தரவுகளுக்கு நாம் வெவ்வேறு சேமிப்பு தொழில்நுட்பங்களை ஏன் பயன்படுத்துகிறோம் என்பதை விளக்குகிறது.

சிக்கல்: ஒரே அளவு அனைவருக்கும் பொருந்தாது

வெவ்வேறு தரவுகளுக்கு வெவ்வேறு அணுகல் முறைகள் உள்ளன:

  • எம்பெடிங்ஸ் (5K x 384 மிதவை எண்கள்): வேகமான வெக்டர் செயல்பாடுகள் தேவை (கோசைன் ஒற்றுமை)

  • சொற்றொடர் மேப்பிங்ஸ் (2500+ சொற்றொடர்கள்): மனித திருத்தம், பதிப்பு கட்டுப்பாடு தேவை

  • வினவல் கேச் (நேரடி வினவல்கள்): வேகமான விசை-மதிப்பு தேடல்கள், TTL காலாவதி தேவை

  • தயாரிப்பு தரவு (64K தயாரிப்புகள்): கட்டமைக்கப்பட்ட அணுகல், பொருந்தக்கூடிய விதிகள் தேவை

அனைத்திற்கும் ஒரே சேமிப்பைப் பயன்படுத்துவது திறமையானதாக இருக்காது.

மூன்று சேமிப்பு தொழில்நுட்பங்கள்

1. நம்பை அணிகள்: வெக்டர் செயல்பாடுகள்

பயன்பாட்டு வழக்கு: எம்பெடிங்ஸ் (தயாரிப்புகள், வினவல்கள், சொற்றொடர்கள்)

ஏன் நம்பை:

  • வேகமான வெக்டர் கணிதம்: அணி செயல்பாடுகளுக்கான மேம்படுத்தப்பட்ட C/ஃபோர்ட்ரான் நூலகங்கள்

  • நினைவக-மேப்படுத்தப்பட்ட கோப்புகள்: 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)

செயல்திறன்: நிகழ்நேர அனுமானத்திற்கு ஏற்ற வேகத்தில் பாரிய ஒற்றுமை தேடல்கள்.

2. JSON கோப்புகள்: மனிதர்-திருத்தக்கூடிய தரவு

பயன்பாட்டு வழக்கு: கட்டமைப்பு, மேப்பிங்ஸ், மெட்டாடேட்டா

ஏன் JSON:

  • மனிதர்-படிக்கக்கூடியது: பார்வையிடவும் பிழைத்திருத்தம் செய்யவும் எளிதானது

  • பதிப்பு கட்டுப்பாடு: Git வேறுபாடுகள் சரியாக என்ன மாற்றம் என்பதை காட்டுகிறது

  • கைமுறை திருத்தம்: குறியீடு இல்லாமல் பிழைகளை சரிசெய்யலாம்

  • உலகளாவிய வடிவம்: ஒவ்வொரு மொழியும் JSON ஐ பாகுபடுத்த முடியும்

நாம் என்ன சேமிக்கிறோம்:

  • சொற்றொடர்-முதல்-வடிகட்டி மேப்பிங்ஸ்: சொற்றொடர்கள் → வடிகட்டி விதிகள்

  • தயாரிப்பு அம்சங்கள்: தயாரிப்புகள் → அம்ச அகராதிகள்

  • வினவல் மெட்டாடேட்டா: வினவல்கள் → கிளிக்குகள், பார்வைகள், ஆதாரங்கள்

  • பைப்லைன் கட்டமைப்பு: படி அளவுருக்கள், வாசல்கள்

கோப்பு வடிவம்: உரை .json கோப்புகள்

ஏற்றுதல்:

import json

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

# தரவை அணுகவும்
filters = mappings['mini pc']  # ['form_factor:mini', 'category:pc']

3. வால்கீ (ரெடிஸ்): வேகமான விசை-மதிப்பு கேச்

பயன்பாட்டு வழக்கு: நேரடி தேடல், தானியங்கி நிரப்புதல், பிரபலமான வினவல்கள்

ஏன் வால்கீ:

  • நினைவகத்தில்: தேடல்களுக்கு மைக்ரோ விநாடி தாமதம்

  • ரெடிசர்ச்: குறியீடுகளுடன் கூடிய வெக்டர் ஒற்றுமை தேடல்

  • TTL காலாவதி: தானியங்கி கேச் செல்லாததாக்குதல்

  • பப்/சப்: சர்வர்கள் முழுவதும் நிகழ்நேர புதுப்பிப்புகள்

  • நிலைத்தன்மை: நீடித்த தன்மைக்கு விருப்பத்தேர்வு வட்டு படிமங்கள்

நாம் என்ன சேமிக்கிறோம்:

  • வினவல் எம்பெடிங்ஸ் கேச்: சமீபத்திய வினவல்கள் → எம்பெடிங்ஸ்

  • பிரபலமான வினவல்கள்: போக்குவரத்து அடிப்படையில் முதல் 1000 வினவல்கள்

  • தானியங்கி நிரப்புதல் குறியீடு: முன்னொட்டு → வினவல் பரிந்துரைகள்

  • வடிகட்டி பிரித்தெடுத்தல் கேச்: வினவல் → பிரித்தெடுக்கப்பட்ட வடிகட்டிகள்

  • தொடர்புடைய தேடல்கள் கேச்: வினவல் → தொடர்புடைய வினவல்கள்

தரவு கட்டமைப்புகள்:

  • சரங்கள்: எளிய விசை-மதிப்பு (வினவல் → எம்பெடிங்)

  • வரிசைப்படுத்தப்பட்ட தொகுப்புகள்: தரவரிசைப்படுத்தப்பட்ட தரவு (மதிப்பெண் அடிப்படையில் பிரபலமான வினவல்கள்)

  • ரெடிசர்ச் குறியீடுகள்: வெக்டர் ஒற்றுமை தேடல்

  • ஹாஷ்கள்: கட்டமைக்கப்பட்ட தரவு (வினவல் மெட்டாடேட்டா)

ஏற்றுதல்:

from app.shared.valkey_cache import get_valkey

valkey = get_valkey()
# ... (செயல்படுத்தல் விவரங்கள் தவிர்க்கப்பட்டது)

முடிவெடுக்கும் அணி

எப்போது நம்பை பயன்படுத்த வேண்டும்

அளவுகோல்கள்:

  • தரவு எண்ணியல் (மிதவை எண்கள், முழு எண்கள்)

  • வேகமான வெக்டர் செயல்பாடுகள் தேவை (புள்ளிப் பெருக்கல், கோசைன் ஒற்றுமை)

  • தரவு படித்தல்-கனமானது (அரிதாக புதுப்பிக்கப்படுகிறது)

  • தரவு பெரியது (மில்லியன் கணக்கான எண்கள்)

  • தொகுதி செயலாக்கம் (ஒரே நேரத்தில் பல உருப்படிகளை செயலாக்கவும்)

எடுத்துக்காட்டுகள்:

  • எம்பெடிங்ஸ் (தயாரிப்புகள், வினவல்கள், சொற்றொடர்கள்)

  • அம்ச வெக்டர்கள்

  • ஒற்றுமை அணிகள்

எப்போது JSON பயன்படுத்த வேண்டும்

அளவுகோல்கள்:

  • தரவு கட்டமைக்கப்பட்டது (பொருள்கள், அணிகள்)

  • மனிதர்-படிக்கக்கூடிய தன்மை தேவை

  • பதிப்பு கட்டுப்பாடு தேவை (Git)

  • தரவு அரிதாக மாறுகிறது (கைமுறை திருத்தங்கள்)

  • தரவு சிறிய-நடுத்தர (<100 MB)

எடுத்துக்காட்டுகள்:

  • கட்டமைப்பு கோப்புகள்

  • சொற்றொடர் மேப்பிங்ஸ்

  • தயாரிப்பு மெட்டாடேட்டா

  • பைப்லைன் அளவுருக்கள்

எப்போது வால்கீ பயன்படுத்த வேண்டும்

அளவுகோல்கள்:

  • வேகமான தேடல்கள் தேவை (மைக்ரோ விநாடிகள்)

  • தரவு அடிக்கடி மாறுகிறது (நேரடி வினவல்கள்)

  • TTL காலாவதி தேவை (கேச் செல்லாததாக்குதல்)

  • பப்/சப் தேவை (நிகழ்நேர புதுப்பிப்புகள்)

  • வெக்டர் தேடல் தேவை (ரெடிசர்ச்)

எடுத்துக்காட்டுகள்:

  • வினவல் கேச்

  • தானியங்கி நிரப்புதல்

  • பிரபலமான வினவல்கள்

  • அமர்வு தரவு

  • விகித வரம்பிடல்

கலப்பு அணுகுமுறை

உகந்த செயல்திறனுக்காக மூன்றையும் இணைக்கிறோம்:

பைப்லைன் (ஆஃப்லைன் செயலாக்கம்)

நம்பை: எம்பெடிங்ஸ், ஒற்றுமை அணிகளை கணக்கிடவும்

JSON: மேப்பிங்ஸ், மெட்டாடேட்டா, கட்டமைப்பு ஆகியவற்றை சேமிக்கவும்

வால்கீ: பயன்படுத்தப்படாது (பைப்லைன் ஆஃப்லைனில் இயங்கும்)

தேடல் சேவை (நேரடி வினவல்கள்)

நம்பை: வட்டில் இருந்து எம்பெடிங்ஸை ஏற்றவும் (நினைவக-மேப்படுத்தப்பட்ட)

JSON: வட்டில் இருந்து மேப்பிங்ஸை ஏற்றவும் (நினைவகத்தில் கேச் செய்யப்பட்டது)

வால்கீ: நேரடி வினவல்கள், தானியங்கி நிரப்புதல், பிரபலமான வினவல்களை கேச் செய்யவும்

தரவு ஓட்டம்

graph LR
    Pipeline[SEO பைப்லைன்
ஆஃப்லைன்] subgraph Storage NP[நம்பை கோப்புகள்
embeddings.npy] JS[JSON கோப்புகள்
mappings.json] end Search[தேடல் சேவை
நேரடி] VK[வால்கீ
கேச்] Pipeline --> NP Pipeline --> JS NP --> Search JS --> Search Search --> VK VK --> Search

செயல்திறன் ஒப்பீடு

நம்பை (நினைவக-மேப்படுத்தப்பட்ட):

  • ஏற்ற நேரம்: உடனடி (மெய்நிகர் நினைவகத்திற்கு பூஜ்ஜிய-நகல் மேப்பிங்)

  • தேடல் நேரம்: பூஜ்ஜியத்திற்கு அருகில் (அணி குறியீட்டிற்கு நேரடி CPU சுட்டிக்காட்டி)

  • நினைவகம்: குறைந்தபட்சம் (OS-நிர்வகிக்கப்பட்ட பக்க கேச், செயல்முறை RAM இல் இல்லை)

JSON:

  • ஏற்ற நேரம்: அதிக தாமதம் (தொடர்ச்சியான பாகுபடுத்துதல் மற்றும் பொருள் உருவாக்கம்)

  • தேடல் நேரம்: திறமையானது (நிலையான ஹாஷ் மேப் மேல்நிலை)

  • நினைவகம்: கணிசமானது (முழு தொடர்வரிசைப்படுத்தப்பட்ட கட்டமைப்பு குவியலில் உள்ளது)

வால்கீ:

  • ஏற்ற நேரம்: நிலையானது (பின்னணி சேவையில் உள்ளது)

  • தேடல் நேரம்: மிதமானது (நெட்வொர்க் சுற்றுபயணம் மற்றும் நெறிமுறை தொடர்வரிசைப்படுத்தல் ஆகியவை அடங்கும்)

  • நினைவகம்: வெளிப்படுத்தப்பட்டது (தரவுத்தள செயல்முறைக்குள் தனிமைப்படுத்தப்பட்டது)

வெற்றியாளர்: அதிக-தொகுதி தொகுதி செயலாக்கத்திற்கு நம்பை, விநியோகிக்கப்பட்ட ஒற்றை-விசை அணுகலுக்கு வால்கீ

வெக்டர் ஒற்றுமை தேடல்

நம்பை (cosine_similarity):

  • தொகுதி செயல்பாடுகள்: வேகமானது (SIMD/வெக்டரைஸ்ட் நேரியல் இயற்கணிதம் மூலம் மேம்படுத்தப்பட்டது)

  • இணையாக்கக்கூடியது: அதிகம் (கிடைக்கக்கூடிய அனைத்து இயற்பியல் CPU கோர்கள் முழுவதும் அளவிடுகிறது)

  • நினைவகம்: நேரியல் (எம்பெடிங் பரிமாணங்களுடன் நேரடியாக அளவிடுகிறது)

வால்கீ (ரெடிசர்ச்):

  • தேடல் வேகம்: மேலானது (சிறப்பு HNSW/வெக்டர் குறியீட்டமைப்பை பயன்படுத்துகிறது)

  • இணையாக்கக்கூடியது: வரையறுக்கப்பட்டது (இயந்திரத்தின் நூல் மாதிரியால் கட்டுப்படுத்தப்படுகிறது)

  • நினைவகம்: தீவிரமானது (மூல எம்பெடிங்ஸ் மற்றும் குறியீட்ட