Key-value — ma’lumotni noyob key va unga tegishli value jufti ko‘rinishida saqlaydigan data modeli. Bu NoSQL tizimlarining eng sodda va tezkor turlaridan biri hisoblanadi.
Asosiy amallar:
SET key value
GET key
DELETE key
Database key orqali qiymatni topadi. Value oddiy string, binary, JSON, number yoki murakkab structure bo‘lishi mumkin.
Key
Key ma’lumotni noyob aniqlaydi.
Misollar:
user:15
session:abc123
product:987
config:payment_timeout
Yaxshi key:
- barqaror;
- collision’siz;
- qisqa;
- namespace’li;
- taxmin qilinadigan formatga ega.
Value
Value database’ga qarab opaque binary yoki tushuniladigan data structure bo‘lishi mumkin.
Opaque value’da database ichki fieldlar bo‘yicha query qilmaydi.
Application value’ni serialize va deserialize qiladi.
Ba’zi key-value tizimlar list, set, map va counter kabi maxsus type’larni qo‘llaydi.
Namespace
Key prefixlari turli data turlarini ajratadi.
Masalan:
user:
session:
cache:
lock:
Bu naming convention.
Database prefixni alohida schema deb bilmasligi mumkin.
Prefix bo‘yicha bulk scan performance va xavfsizlikka ta’sir qiladi.
Get
GET key bo‘yicha qiymatni qaytaradi.
Key mavjud bo‘lmasa:
- null;
- not found;
- maxsus error
qaytishi mumkin.
Application “mavjud emas” bilan “storage ishlamayapti” holatini ajratadi.
Set
SET yangi value yozadi yoki mavjudini almashtiradi.
Variantlar:
- faqat mavjud bo‘lmasa;
- faqat mavjud bo‘lsa;
- expiration bilan;
- version sharti bilan;
- return old value.
Bu atomic patternlar lock va idempotency uchun ishlatiladi.
Delete
Key o‘chiriladi.
Distributed storage’da delete darhol barcha physical nusxadan yo‘qolmasligi mumkin.
Tombstone va retention ishlatilishi mumkin.
Delete qayta chaqirilganda yakuniy holat key mavjud emasligi bo‘lsa idempotent hisoblanadi.
TTL
Key ma’lum vaqtdan keyin avtomatik o‘chishi mumkin.
Bu Time To Live.
Qo‘llanishlar:
Expiration aniq sekundda emas, background cleanup yoki lazy check bilan bajarilishi mumkin.
Cache sifatida
Key-value storage ko‘pincha cache uchun ishlatiladi.
Patternlar:
- cache-aside;
- read-through;
- write-through;
- write-behind.
Cache missda application source database’dan ma’lumot olib, key-value storage’ga yozadi.
TTL stale data vaqtini cheklaydi.
Session storage
Web session ID key sifatida ishlatiladi.
Value ichida:
saqlanishi mumkin.
Session tokenning o‘zi maxfiy bo‘lsa logda ko‘rsatilmaydi.
Counter
Atomic increment orqali counter saqlash mumkin.
Misollar:
Distributed replicationda counter consistency modeli muhim.
Compare-and-set
Value faqat oldingi version yoki qiymat mos bo‘lsa yangilanadi.
Bu optimistic concurrency.
if version = 7
then set value and version = 8
Mos kelmasa client qayta o‘qib, merge yoki retry qiladi.
Atomic operation
Key-value tizimlar ko‘pincha bitta key doirasida atomic operation beradi.
Bir nechta key uchun transaction imkoniyati cheklangan yoki alohida bo‘lishi mumkin.
Data model business invariantni bir key ichida saqlashga moslashtirilishi mumkin.
Partitioning
Distributed key-value database key hash orqali node’lar orasida taqsimlanadi.
hash(key) → partition
Yaxshi taqsimlangan key loadni tenglashtiradi.
Bitta mashhur key hot partition yaratadi.
Consistent hashing
Node qo‘shilganda barcha keylarni emas, faqat ma’lum qismini qayta taqsimlashga yordam beradi.
Virtual node’lar load balansini yaxshilaydi.
Aniq algorithm va replica placement implementationga bog‘liq.
Replication
Har key bir nechta node’da nusxalanishi mumkin.
- leader-follower;
- quorum;
- multi-leader;
- eventual.
Read va write nechta replica bilan ishlashi consistency va availabilityga ta’sir qiladi.
Quorum
N replica soni, W write tasdiqlari, R read replica soni bo‘lishi mumkin.
R + W > N bo‘lsa read va write to‘plamlari kesishish ehtimoli yuqori.
Biroq conflict resolution va stale replica semantikasi implementationga bog‘liq.
Scan
Key-value model aniq key lookup uchun optimallashtirilgan.
Barcha keylarni prefix yoki range bo‘yicha scan qilish qimmat bo‘lishi mumkin.
Secondary index yo‘q bo‘lsa value ichidagi field bo‘yicha query uchun boshqa storage talab qilinadi.
Serialization
Value formatlari:
- JSON;
- MessagePack;
- Protobuf;
- binary custom format.
Version field eski va yangi application versiyalariga compatibility beradi.
Untrusted binary deserialization xavfli bo‘lishi mumkin.
Memory va disk
Ba’zi key-value tizimlar asosan memory’da, boshqalari diskda ishlaydi.
Memory storage juda tez, ammo data hajmi RAM bilan cheklangan.
Persistence:
- snapshot;
- append-only log;
- WAL;
- replication
orqali ta’minlanishi mumkin.
Eviction
Memory cheklanganda cache sifatidagi key-value storage ayrim keylarni chiqarib yuborishi mumkin.
Eviction siyosatlari:
- least recently used;
- least frequently used;
- random;
- TTLga yaqin;
- faqat expirationli keylar.
Eviction data yo‘qolishi mumkinligini bildiradi, shu sababli cache source of truth sifatida qaralmaydi.
Hot key
Bitta key juda ko‘p request olsa umumiy cluster bo‘sh bo‘lsa ham ayni partition yoki node bottleneckka aylanadi.
Hot key uchun:
ishlatilishi mumkin.
Counter kabi write-hot key alohida sharding yoki aggregation talab qiladi.
Key naming
Key formati versionlanadi va separatorlar izchil ishlatiladi. Juda uzun key network hamda memory xarajatini oshiradi.
Bog‘liq tushunchalar
Key-value database, Cache, TTL, Atomic operation, Compare-and-set, Consistent hashing, Partitioning, Replication, Session storage, NoSQL