Bosh sahifa Wiki Cassandra

Cassandra

Cassandra — katta hajmdagi ma’lumotlarni ko‘p node bo‘ylab taqsimlab, yuqori write throughput va availability bilan saqlashga mo‘ljallangan wide-column distributed database.

Cassandra markaziy primary node’ga qattiq bog‘lanmaydi. Cluster node’lari client requestlarini qabul qilib, partition va replica’lar bilan muvofiqlashtirishi mumkin.

Keyspace

Keyspace relational database’dagi database yoki namespace’ga yaqin tushuncha.

Unda:

sozlamalari mavjud.

Har keyspace data qaysi datacenter va replica sonida saqlanishini belgilaydi.

Table

Table row va columnlardan iborat, ammo data modeli query-driven.

Schema avval qanday querylar bajarilishini hisobga olib tuziladi.

Join va arbitrary aggregation cheklangan bo‘lishi mumkin.

Bir xil data turli querylar uchun bir nechta table’da denormalizatsiya qilinadi.

Partition key

Primary keyning birinchi qismi partition key.

U row qaysi token va replica node’larga tushishini belgilaydi.

Yaxshi partition key:

Clustering column

Partition ichidagi rowlar clustering columnlar bo‘yicha tartiblanadi.

Masalan:

device_id — partition key
event_time — clustering column

Bitta device eventlari vaqt tartibida saqlanadi.

Range query partition ichida samarali.

Primary key

Composite primary key partition va clustering qismlaridan iborat bo‘lishi mumkin.

Soddalashtirilgan:

PRIMARY KEY ((tenant_id, device_id), event_time)

Ikki qavs ichidagi fieldlar combined partition key.

event_time partition ichidagi tartibni belgilaydi.

Coordinator

Client istalgan mos node’ga request yuborishi mumkin.

U node coordinator bo‘lib:

  • partitionni topadi;
  • replica’larga request yuboradi;
  • consistency level bo‘yicha javob kutadi;
  • natijani clientga qaytaradi.

Coordinator data’ning doimiy leaderi emas.

Token ring

Partition key hash qilinib token space’dagi nuqtaga tushadi.

Node’lar token range’larini boshqaradi.

Virtual node’lar bitta fizik node’ga ko‘p kichik range beradi.

Bu load balancing va node qo‘shishni soddalashtiradi.

Replication factor

Har partition nechta replica’da saqlanishini belgilaydi.

Masalan, factor 3.

Replica placement datacenter topology’ni hisobga olishi mumkin.

Factor oshsa availability va storage sarfi oshadi.

Consistency level

Har read yoki write uchun nechta replica javobi kerakligi tanlanadi.

Misollar:

  • ONE;
  • QUORUM;
  • ALL;
  • LOCAL_QUORUM.

Kuchliroq daraja consistency’ni oshiradi, availability va latencyga ta’sir qiladi.

Tunable consistency

Operationga qarab boshqa consistency tanlanadi.

User session uchun local quorum, analytics counter uchun one ishlatilishi mumkin.

R + W > N modeli read va write quorum kesishishini tushuntiradi, ammo amaliy repair va failure semantikasi ham muhim.

Write path

Write odatda:

  1. commit log;
  2. memtable;
  3. replica acknowledgement;
  4. memtable flush;
  5. SSTable

bosqichlaridan o‘tadi.

Write sequential va tez.

Eski qiymat joyida update qilinmaydi.

Read path

Read:

orqali eng yangi qiymatni topadi.

Ko‘p SSTable read amplification yaratishi mumkin.

Compaction filelar sonini kamaytiradi.

Tombstone

Delete yoki TTL tugashi tombstone marker yozadi.

Tombstone eski qiymatni read natijasidan chiqaradi.

Compaction xavfsiz bo‘lganda fizik data olib tashlanadi.

Ko‘p tombstone queryni sekinlashtirishi mumkin.

Compaction

SSTable’lar background’da birlashtiriladi.

Strategiyalar workloadga qarab:

  • size-tiered;
  • leveled;
  • time-windowga yaqin

bo‘lishi mumkin.

Compaction disk I/O va temporary space talab qiladi.

Repair

Replica’lar vaqt o‘tishi bilan farqlanishi mumkin.

Repair token range’lar bo‘yicha data’ni solishtirib moslashtiradi.

Repair muntazam ishlamasa eski replica va tombstone interactioni o‘chirilgan data qaytishiga sabab bo‘lishi mumkin.

Hinted handoff

Replica vaqtincha ishlamasa boshqa node unga yetkazilishi kerak bo‘lgan write haqida hint saqlaydi.

Node qaytgach hint yuboriladi.

Hint uzoq downtime uchun to‘liq repair o‘rnini bosmaydi.

Read repair

Read paytida replica javoblari farq qilsa eskirgan nusxa yangilanishi mumkin.

Bu tez-tez o‘qiladigan data’ni moslashtiradi.

Kam o‘qiladigan partitionlar uchun anti-entropy repair kerak.

TTL

Column yoki row ma’lum vaqtdan keyin expire bo‘lishi mumkin.

TTL session, event retention va temporary data uchun qulay.

Expiration tombstone yaratadi.

Juda ko‘p qisqa TTL compaction va tombstone yukini oshiradi.

Lightweight transaction

Compare-and-setga o‘xshash shartli operation consensus protokoli orqali bajarilishi mumkin.

Masalan:

insert if not exists

Bu oddiy write’dan sekinroq.

Faqat uniqueness yoki kritik conditional update uchun ishlatiladi.

Partition hajmi

Bitta partition juda katta bo‘lsa read, compaction, repair va node ko‘chirish qimmatlashadi.

Timeseries data vaqt bucketlari bilan bo‘linishi mumkin:

device_id + month

Bucket juda kichik bo‘lsa esa partitionlar soni va query fan-out oshadi.

Secondary index

Secondary index mavjud bo‘lishi mumkin, ammo yuqori cardinality, cluster hajmi va query patterniga qarab cheklovlarga ega.

Asosiy data model partition key querylariga tayangan holda quriladi.

Search yoki ad-hoc filter uchun alohida tizim ishlatilishi mumkin.

Batch

Cassandra batchi umumiy bulk performance vositasi emas.

U bir nechta bog‘liq mutationni muvofiqlashtirish uchun ishlatiladi.

Turli partitionlarga ulkan batch coordinator va replica’larga katta bosim beradi.

Monitoring

Node bo‘yicha pending compaction, dropped message, read-write latency, disk, tombstone va repair holati kuzatiladi.

Cluster o‘rtachasi sekin bitta node’ni yashirishi mumkin.

Bog‘liq tushunchalar

Wide-column database, Partition key, Clustering column, Token ring, Replication factor, Consistency level, SSTable, Compaction, Tombstone, Repair