Kami telah direkomendasikan oleh vendor produk untuk menggunakan Cassandra untuk skalabilitas yang lebih baik.

Alam semesta data kami sekitar 10 TB. Vendor produk bersikeras bahwa kami dapat menyimpan 10 TB ini di 6 node dengan masing-masing node memiliki ruang 2 TB.

Bagaimana ini mungkin? faktor replikasi atau kompresi apa yang perlu kita asumsikan untuk mencapai hal di atas?

3
BVAD 10 Januari 2021, 13:59

2 jawaban

Jawaban Terbaik

Tergantung.

Data dalam cassandra disimpan dalam format gzip saat Anda menggunakan LZ4Compressor, yang merupakan default. Jika kami menghilangkan tingkat kompresi sama sekali untuk alasan kesederhanaan, Anda dapat menggunakan alat ini untuk menghitung beban simpul:

https://www.ecyrd.com/cassandracalculator/

Dengan ukuran cluster 6 saya akan menyarankan RF=3, artinya setiap node harus menampung 50% data, yaitu 5TB dalam kasus Anda (tidak terkompresi).

Bahkan dengan RF=1 (yang tidak boleh Anda gunakan) setiap node harus menampung 17% dari total data.

2
Alex Tbk 10 Januari 2021, 11:55

Ini adalah pertanyaan bagus yang relatif sulit untuk dijawab. Ukuran node Cassandra sangat tergantung pada jumlah faktor, tidak hanya pada ukuran data:

  • Anda perlu mempertimbangkan denormalisasi data Anda untuk dapat menjalankan kueri yang perlu Anda jalankan
  • jenis data apa yang Anda simpan di database - angka, teks, biner, dll. - ini akan memengaruhi rasio kompresi jika Anda menggunakan kompresi. (Saya telah melihat nilai yang berbeda - dari mengompresi hingga 10% dari ukuran data asli, hingga rasio kompresi negatif, ketika data tidak dapat dikompres)
  • skema partisi untuk tabel (partisi lebar vs sempit, karena untuk data panas dengan partisi sempit Anda mungkin perlu menonaktifkan kompresi, dll.)
  • anda perlu memperhitungkan overhead penyimpanan metadata, seperti TTL & waktu penulisan (semakin banyak kolom yang Anda miliki, semakin tinggi overhead)
  • Anda perlu mempertimbangkan rekomendasi tentang ruang disk kosong yang diperlukan untuk tugas pemeliharaan, seperti pemadatan, snapshot, dll.
  • ...

Biasanya, disarankan untuk membuat lingkungan pengujian (misalnya, di AWS), dan melakukan pembuatan data & pengujian beban untuk menemukan ukuran yang tepat untuk perangkat keras, dan memahami berapa banyak data yang akan disimpan di disk. Saya pribadi dapat merekomendasikan untuk menggunakan NoSQLBench yang berkinerja tinggi & sangat fleksibel terkait pembuatan data - ada sejumlah besar skema yang ada yang dapat digunakan untuk pengujian awal, dan Anda juga dapat membuat skema sendiri. (Anda masih dapat menggunakan cassandra-stress bawaan, tetapi kurang fleksibel. Ada juga tlp-stress, tetapi juga bisa sedikit kurang fleksibel daripada NoSQLBench)

Ada sejumlah dokumen yang ada yang dapat membantu dengan perencanaan kapasitas, dan penyetelan, seperti (tentu saja ada lebih banyak lagi):

Mengenai pengaturan spesifik Anda, dengan RF=3 dan 6 node yang direkomendasikan, dan ruang disk yang dicadangkan (kasus pesimistis adalah 50% dari semua ruang disk, kami dapat mengatakan bahwa itu bisa menjadi 30-35% dari ruang disk), cluster Anda dapat menyimpan ~2,5-2,6Tb data (tanpa menggunakan kompresi apa pun): (2Tb x 0,65 x 6)/3. Untuk membuatnya menyimpan 10Tb data, rasio kompresi Anda harus ~25% dari ukuran aslinya, tetapi ini mungkin tidak mungkin untuk data Anda.

1
Alex Ott 10 Januari 2021, 12:18