Shard key — distributed database yoki partitioned storageda yozuv qaysi shardga joylashishini aniqlaydigan bir yoki bir nechta field. Router keyni hash, range yoki directory mapping orqali shardga aylantiradi. To‘g‘ri tanlov storage va trafficni muvozanatlashtiradi; noto‘g‘ri tanlov hot shard, keng fan-out query va qimmat reshardingga olib keladi.
Asosiy xususiyatlar
Yuqori cardinality ko‘p turli key qiymati beradi va taqsimotni mayda bo‘laklarga ajratadi. Uniform write distribution bitta shardning boshqalardan tezroq qizib ketishini oldini oladi. Shu bilan birga query locality ham muhim: tez-tez birga o‘qiladigan ma’lumot bitta key ostida bo‘lsa cross-shard join kamayadi.
Faqat country kabi kam qiymatli ustun yomon key bo‘lishi mumkin. Faqat monoton timestamp range shardingda barcha yangi writesni oxirgi shardga yig‘adi. Random UUID hash bilan yaxshi tarqaladi, ammo vaqt oralig‘i querysi barcha shardlarga boradi.
Hash, range va directory
Hash sharding key space’ni odatda bir tekis tarqatadi va point lookupni aniq route qiladi. Range sharding interval querylari uchun qulay, lekin skew va moving hotspotga sezgir. Directory-based mapping tenantni istalgan shardga joylashtirib ko‘chirishni boshqaradi, evaziga mapping service dependency bo‘ladi.
Compound key, masalan (tenant_id, bucket), tenant localitysi va katta tenant trafficini bir necha bo‘lakka ajratishni muvozanatlashtiradi. Bucket soni query fan-out va write tarqalishi o‘rtasidagi tanlovdir.
O‘zgarmaslik va routing
Shard key odatda immutable qilinadi. Uni o‘zgartirish rowni bir sharddan boshqasiga atomar ko‘chirishni talab qiladi. Global unique constraint yoki foreign key shard keyni o‘z ichiga olmasa barcha shardlar bo‘yicha coordinator kerak bo‘lishi mumkin.
Query shard keyni to‘liq bersa router target shardni biladi. Key bo‘lmasa scatter-gather bajarilib, latency va resource sarfi shard soni bilan o‘sadi. API va access patternlar shuning uchun schema bilan birga loyihalanadi.
Tanlash va evolyutsiya
Nomzod keylar real production histogram, tenant hajmi, write rate va query log bilan baholanadi. Average emas, eng katta tenant va eng mashhur key muhim. Data residency talabi tenant yoki regionni mappingga qo‘shishi mumkin.
Resharding uchun virtual shard, consistent hashing yoki directory migration mexanizmi oldindan ko‘zda tutiladi. Dual write va backfill izchilligi nazorat qilinadi. Monitoring har shard QPS, storage, CPU, latency va key frequencylarini ko‘rsatib, skewni capacity muammosiga aylanishidan oldin topadi.
Tenantli tizim misoli
tenant_id shard key sifatida tenant ma’lumotini bir joyda saqlab, backup, export va access controlni soddalashtiradi. Ammo bitta tenant shard capacitysidan katta bo‘lsa uni bo‘lib bo‘lmaydi. (tenant_id, bucket_id) compound key katta tenantni tarqatadi, kichik tenant uchun esa query bir necha bucketga fan-out qiladi. Directory har tenantga bucket sonini alohida belgilashi mumkin.
Shard key privacy nuqtai nazaridan ham ko‘riladi. Email kabi PII’ni raw routing metadata va loglarda ko‘rsatish o‘rniga stable opaque tenant ID ishlatiladi. Hash qilishning o‘zi anonimlashtirish emas, ayniqsa input space kichik bo‘lsa. Key generation, uniqueness va deletion lifecycle schema migration bilan birga audit qilinadi.
Key tanlovi qaytarib bo‘lmas qaror emas, ammo keyingi o‘zgarish qimmat. Shu sabab synthetic benchmark bilan birga real query replay va growth projection ishlatiladi; faqat bugungi data hajmi kelajakdagi skewni ko‘rsatmaydi.
Bog‘liq tushunchalar
Sharding, Partition key, Consistent hashing, Hot shard, Scatter-gather, Resharding, Data locality, Cardinality