JavaRush /Kurslar /All lectures for UZ purposes /Apache Cassandra: ma'lumotlarni klasterni saqlash

Apache Cassandra: ma'lumotlarni klasterni saqlash

All lectures for UZ purposes
Daraja, Dars
Mavjud

5.1 Ma'lumotlarni taqsimlash

Kel, ma'lumotlar klaster tugunlariga kalitga qarab qanday taqsimlanishini ko'rib chiqamiz. Cassandra taqsimlash strategiyasini o'rnatishga imkon beradi. Birinchi strategiya ma'lumotlarni kalitning md5 qiymatiga qarab tarqatadi - tasodifiy segmentator. Ikkinchi strategiya kalitning bitli vakillikka e'tibor beradi - tartib raqami segmentatori.

Ko'p hollarda birinchi strategiya ko'proq foyda beradi, chunki serverlar orasida ma'lumotlarni taqsimlash haqida tashvishlanishingiz shart emas. Ikkinchi strategiyani nodir hollarda ishlatishadi, masalan, interval so'rovlari uchun. Muhimi, bu strategiyani tanlash klasterni yaratishdan oldin amalga oshiriladi va keyinchalik ma'lumotlarni qayta yuklamasdan o'zgartirilmaydi.

Cassandra ma'lumotlarni taqsimlash uchun consistent hashing nomli texnikani ishlatadi. Bu ma'lumotlarni tugunlar orasida bo'lishga va yangi tugun qo'shish yoki o'chirishda uzatiladigan ma'lumotlarning kam bo'lishiga imkon beradi. Har bir tugunga kalitlar md5 qiymatlarining to'plamini segmentlarga ajratadigan belgi (token) beriladi.

Odatda RandomPartitioner ishlatiladi, bu har bir kalit uchun 128-bit md5 hisoblaydi. Ma'lumotlar qayerda saqlanishini aniqlash uchun faqat tugunlarning belgilarini kalitning md5 qiymati bilan solishtirish kerak. Tanlangan tugunlar soni replikatsiya darajasiga (replication factor) teng. Replikatsiya darajasi har bir kalitlar maydoni uchun belgilanadi va ma'lumotlarning ortiqligini boshqarishga imkon beradi.

Klasterni yangi tugun qo'shishdan oldin unga belgi berish kerak. Tugunda saqlanadigan ma'lumotlar miqdori bu belgidan keyingi belgiga qadar bo'lgan kalitlar protsenti bilan aniqlanadi. Barcha klaster uchun belgilar uzuk (ring) deb ataladi.

Quyida 6 ta tugundan iborat klaster uzugini ko'rsatadigan illyustratsiya mavjud, belgilarning bir xil taqsimlangan bo'lishi nodetool ichki utilitasidan olingan.

5.2 Ma'lumotlarni yozishda muvofiqlashtirish

Cassandra klasterining tugunlari teng huquqli va ularning har biri o'qish yoki yozish uchun mijozni ulashishi mumkin. So'rovlar koordinaция bosqichidan o'tadi. Bu paytda server kalit, segmentator va belgilardan foydalanadi, ma'lumotlar qaysi tugunlarda joylashganligini biladi va so'rovlarni ushbu tugunlarga yuboradi.

Koordinatsiyani amalga oshirgan tugun koordinatsiyachi deb ataladi. Ma'lumotlar saqlanadigan tugunlar esa replikatsiya tugunlari deb ataladi. Koordinatsiyachi kalit, segmentator va belgilarga qarab har qanday vaqtda replikatsiya tugunlaridan biri bo'lishi mumkin.

Har bir so'rov uchun, bu o'qishmi yoki yozishmi, ma'lumotlarning muvofiqlik darajasini o'rnatish mumkin.

Yozishda bir nechta replikatsiyalarda (tugunlarda) operatsiyaning muvaffaqiyatini (yani ma'lumotlarning yozilganligini) tekshirishimiz kerak. Yozish uchun quyidagi muvofiqlik darajalari mavjud:

  • ONE — Koordinatsiyachi barcha replikatsiya tugunlariga so'rov yuboradi, lekin birinchi tugundan tasdiq olingach darhol foydalanuvchiga boshqaruvni qaytaradi.
  • TWO — Koordinatsiyachi ikki birinchi tugundan tasdiq olishni kutadi va keyin ruxsat beradi.
  • THREE — Huddi shunday, lekin koordinatsiyachi uchinchi birinchi tugundan tasdiq olishni kutadi va keyin boshqaruvni qaytaradi.
  • QUORUM — Kvorum yig'iladi: koordinatsiyachi replikatsiyaning yarmidan ko'prog'idan tasdiq olishni kutadi, ya'ni round(N / 2) + 1, bu erda N - replikatsiya darajasi.
  • LOCAL_QUORUM — Koordinatsiyachi kvorumni yig'ilishini, har bir so'rovni o'z ichida amalga oshiradigan markazdan ko'proq yarim replikatsiya tugunlari tasdiqini kutadi. Bu ma'lumotlarni boshqa markazlarga uzatish bilan bog'liq kechikishlarni oldini olishga yordam beradi.
  • EACH_QUORUM — Koordinatsiyachi har bir ma'lumotlar markazida mustaqil kvorum yig'ilishini kutadi.
  • ALL — Koordinatsiyachi barcha replikatsiya tugunlarining tasdiqini kutadi.
  • ANY — Koordinatsiyachi ma'lumotlarni yozishga ruxsat beradi, hatto barcha replikatsiya tugunlari javob bermasa ham. U replikatsiya tugunlaridan birining birinchi javobini yoki ma'lumotlar koordinatori tomonidan "hinted handoff" orqali saqlanishini kutadi.

5.3 Ma'lumotlarni o'qishda muvofiqlashtirish

O'qish uchun muvofiqlik darajasi qaysi replikalardan o'qish amalga oshirilishini aniqlaydi. O'qish uchun quyidagi muvofiqlik darajalari mavjud:

  • ONE — Koordinatsiyachi yaqin replikatsiya tuguniga so'rov yuboradi. Boshqa replikatsiyalar ham o'qish va tuzatish uchun o'qiladi (read repair), bu ehtimollik Cassandra konfiguratsiyasida o'rnatilgan.
  • TWO — Koordinatsiyachi ikki yaqin tugunga so'rov yuboradi. Kattaroq vaqt belgisi qiymati tanlanadi.
  • THREE — Avvalgi variantga o'xshab, lekin uch tugun bilan ishlanadi.
  • QUORUM — Kvorumni yig'ish uchun koordinatsiyachi ko'proq replikatsiya tugunlariga so'rov yuboradi, ya'ni round(N / 2) + 1, bu erda N - bu replikatsiya darajasi.
  • LOCAL_QUORUM — Koordinatsiya amalga oshiriladigan markazda kvorum yig'iladi. Vaqt markasi bo'yicha oxirgi ma'lumot qaytariladi.
  • ACH_QUORUM — Koordinatsiyachi har bir ma'lumotlar markazida kvorum yig'ilishi amalga oshirilganidan keyin ma'lumotlarni oladi.
  • ALL — Koordinatsiyachi barcha replikalardan ma'lumotlarni o'qiydi va ma'lumotlarni qaytaradi.

Agar yozish tasdiqini olingan tugunlar soni va o'qish amalga oshiriladigan tugunlar soni replikatsiya darajasidan ko'p bo'lsa, biz yozishdan keyin har doim yangi qiymatni o'qishimizni kafolatlay olamiz. Bu qat'iy muvofiqlik (strong consistency) deb ataladi. Agar qat'iy muvofiqlik bo'lmasa, o'qish eski ma'lumotlarni qaytarish ehtimoli mavjud.

Oxir-oqibat, ma'lumotlar replikatsiyalar o'rtasida bir xil bo'ladi, koordinatsiya kutishidan keyin. Bu yakuniy muvofiqlik deb ataladi. Agar barcha tugunlar yozish uchun mavjud bo'lmasa, ta'mirlash vositalari, masalan, o'qish bilan tuzatish va anti-entropy node recovery, ishlatiladi. Bu keyingi maqolada.

QUORUM bilan o'qish va yozish uchun doim qat'iy muvofiqlik mavjud bo'ladi. Yozishda ALL va o'qishda ONE qat'iy muvofiqlik xuddi shunday bo'ladi. O'qish operatsiyalari tezroq va ko'proq mavjud bo'ladi. Bu shuni anglatadiki, ko'proq tugunlar ishdan chiqqanida ham, o'qish QUORUM orqali amalga oshiriladi.

Yozish operatsiyalari uchun barcha ishlaydigan replikatsiya tugunlari talab qilinadi. Yozishda ONE, o'qishda ALL qat'iy muvofiqlik talab qilinadi. Bu yozuv operatsiyalarini tezroq bajarishga imkon beradi va yozuv mavjudligini oshiradi, chunki yozuv operatsiyasi o'tganligini tasdiqlash uchun faqat bitta server etarli bo'ladi.

O'qish esa sekinroq va barcha replikatsiya tugunlarini talab qiladi. Agar dasturga qat'iy muvofiqlik talab qilinmasa, o'qish va yozish operatsiyalarini tezlashtirish va mavjudlikni oshirish uchun kichikroq muvofiqlik darajasini o'rnatish mumkin.


NoSQL va Apache Cassandra (ulanish va sozlash)

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION