Apa itu SSTable?

Jawaban:

105

Sorted Strings Table (dipinjam dari google) adalah file pasangan string kunci / nilai, diurutkan berdasarkan kunci

Schildmeijer
sumber
4
Terima kasih atas jawaban SO Cassandra luar biasa lainnya! BTW,
pernahkah
Apakah secara umum tidak dapat diubah?
Dean J
1
ya, sstables tidak dapat diubah oleh desain - yang merupakan fitur yang luar biasa
Schildmeijer
Bagaimana bisa keduanya diurutkan dan tidak berubah?
xjcl
56

"SSTable menyediakan peta yang persisten dan teratur dari kunci ke nilai, dengan kunci dan nilai adalah string byte arbitrer. Operasi disediakan untuk mencari nilai yang terkait dengan kunci yang ditentukan, dan untuk melakukan iterasi pada semua pasangan kunci / nilai dalam kisaran kunci yang ditentukan. Secara internal, setiap SSTable berisi urutan blok (biasanya setiap blok berukuran 64KB, tetapi ini dapat dikonfigurasi). Indeks blok (disimpan di akhir SSTable) digunakan untuk menemukan blok; indeks dimuat ke dalam memori ketika SSTable dibuka. Pencarian dapat dilakukan dengan pencarian disk tunggal: pertama-tama kita menemukan blok yang sesuai dengan melakukan pencarian biner dalam indeks dalam memori, dan kemudian membaca blok yang sesuai dari disk. Secara opsional, SSTable dapat sepenuhnya dipetakan ke dalam memori, yang memungkinkan kita untuk melakukan pencarian dan pemindaian tanpa menyentuh disk."

zhouchonghz AT gmail.com
sumber
4
"tanpa menyentuh disk" -> "tanpa sadar bahwa disk sedang disentuh". IO yang dipetakan memori adalah teknik yang sangat berguna karena mendelegasikan IO yang sebenarnya ke OS, dengan asumsi ia dapat melakukan pekerjaan yang baik di caching (terutama ketika beberapa proses berbagi file yang sama). Tetapi memiliki kelemahan bahwa Anda tidak dapat mengontrolnya. Jika halaman tidak tersimpan dalam memori, utas akan memblokir dan tidak dapat melakukan operasi lain; bandingkan dengan "async IO", di mana Anda dapat mendaftarkan callback dan melakukan hal lain di thread yang sama, sementara IO tertunda.
ithkuil
2
@ithkuil: Anda benar-benar dapat memiliki kontrol atas IO yang dipetakan memori setidaknya sampai dapat memastikan bahwa halaman tertentu ada dalam memori atau telah dimasukkan ke disk (masih ada ruang gerak untuk halaman yang tidak dijamin akan masuk memori tetapi sangat baik bisa). Itulah hal-hal menakjubkan seperti mlock (), msync (), dan MAP_LOCKED. Anda juga bisa mendapatkan pemahaman tentang apa yang saat ini dan tidak dihalaman melalui mincore ().
Christopher Smith
2
@ChristopherSmith: ya, Anda benar, ada cara untuk mengendalikannya. Namun, biasanya ini digunakan untuk bagian kinerja kritis (realtime) atau masalah terkait keamanan (seperti menghindari kata sandi dalam memori ditukar pada disk). File yang dipetakan memori sangat berguna karena Anda tidak perlu memutuskan berapa banyak file yang akan disimpan dalam memori; jika tidak, Anda bisa membaca seluruh file di memori tanpa mmap dan mencapai efek yang sama. Sebenarnya, saya baru saja memahami kode cassandra; satu-satunya panggilan mlockall(MCL_CURRENT);dilakukan saat startup. Lihat juga: goo.gl/AEgPM
ithkuil
4
Kutipan di atas berasal dari makalah BigTable .
ShreevatsaR
4

Tablet disimpan dalam bentuk SSTables.

SSTable (langsung dipetakan ke GFS) adalah penyimpanan tetap berbasis nilai kunci. Ini menyimpan potongan data, masing-masing 64KB.

Definisi:

  • Indeks kunci: kunci dan lokasi awal
  • Chunk adalah unit penyimpanan di GFS, manajemen replika berdasarkan potongan
manjit singh
sumber
3
  • SSTable (engl. Sorted Strings Table) adalah file pasangan string kunci / nilai, diurutkan berdasarkan kunci.

  • SSTable menyediakan peta yang persisten dan terurut dari kunci ke nilai, di mana kunci dan nilai adalah string byte arbitrer.

  • Secara internal, setiap SSTable berisi urutan blok (biasanya
    setiap blok berukuran 64KB, tetapi ini dapat dikonfigurasi).

miksiii
sumber