SSTable nedir?


Yanıtlar:


106

Sıralanmış Dizeler Tablosu (google'dan ödünç alınmıştır), anahtarlara göre sıralanmış anahtar / değer dizesi çiftlerinden oluşan bir dosyadır.


4
Yine mükemmel bir SO Cassandra cevabı için teşekkürler! BTW, bu soruyu gördünüz mü: stackoverflow.com/questions/2573106/…
knorv

Genelde değişmez mi?
Dean J

1
evet, sstables tasarım gereği değişmez - bu harika bir özellik
Schildmeijer

O halde nasıl hem sıralanabilir hem de değiştirilemez?
xjcl

56

"Bir SSTable, anahtarlardan değerlere kalıcı, sıralı değişmez bir eşleme sağlar; burada hem anahtarlar hem de değerler rastgele bayt dizeleridir. Belirtilen bir anahtarla ilişkili değeri aramak ve bir anahtar / değer çiftindeki tüm anahtar / değer çiftlerini yinelemek için işlemler sağlanır. Belirtilen anahtar aralığı. Dahili olarak, her SSTable bir dizi blok içerir (tipik olarak her blok 64KB boyutundadır, ancak bu yapılandırılabilir). Blokların yerini belirlemek için bir blok indeksi (SSTable'ın sonunda saklanır) kullanılır; indeks yüklenir SSTable açıldığında belleğe. Tek bir disk arama ile bir arama gerçekleştirilebilir: önce bellek içi indekste ikili arama yaparak uygun bloğu buluruz ve ardından uygun bloğu diskten okuyarak. Opsiyonel olarak, bir SSTable tamamen belleğe eşlenebilir, bu da diske dokunmadan arama ve tarama yapmamızı sağlar."


4
"diske dokunulmadan" -> "diske dokunulduğunun farkında olmadan". Bellek eşlemeli GÇ çok kullanışlı bir tekniktir, çünkü önbelleğe alma konusunda iyi bir iş çıkarabileceğini varsayarak (özellikle birkaç işlem aynı dosyayı paylaştığında) gerçek GÇ'yi işletim sistemine devreder. Ama sizin kontrolünüzün olmaması dezavantajına sahiptir. Sayfa bellekte yerleşik değilse, iş parçacığı engellenir ve diğer işlemleri gerçekleştiremez; IO beklemedeyken bir geri arama kaydedebileceğiniz ve aynı iş parçacığı içinde başka şeyler yapabileceğiniz "async IO" ile karşılaştırın.
ithkuil

2
@ithkuil: En azından belirli sayfaların bellekte olduğundan veya diske kaydedildiğinden emin olma noktasına kadar bellek eşlemeli GÇ'nin kontrolüne kesinlikle sahip olabilirsiniz (içinde olması garanti edilmeyen sayfalar için hala kıpırdama alanı vardır) bellek ama çok iyi olabilir). Mlock (), msync () ve MAP_LOCKED gibi harika şeylerin hepsi budur. Ayrıca, mincore () aracılığıyla şu anda neyin sayfalandırılıp nelerin alınmadığını da anlayabilirsiniz.
Christopher Smith

2
@ChristopherSmith: evet haklısın, onu kontrol etmenin yolları var. Ancak, genellikle kritik performans bölümleri (gerçek zamanlı) veya güvenlikle ilgili sorunlar (bellek içi bir parolanın diskte değiştirilmesini önlemek gibi) için kullanılır. Bellek eşlemeli dosyalar, tam olarak ne kadarının bellekte tutacağına karar vermeniz gerekmediği için çok kullanışlıdır; aksi takdirde tüm dosyayı hafızada mmap olmadan okuyabilir ve aynı etkiyi elde edebilirsiniz. Aslında, cassandra kodunu inceledim; tek çağrı mlockall(MCL_CURRENT);başlangıçta yapılır. Ayrıca bakınız: goo.gl/AEgPM
ithkuil


4

Bir tablet SSTables biçiminde saklanır.

SSTable (doğrudan GFS ile eşleştirilmiş), anahtar-değer tabanlı değişmez depolamadır. Her biri 64 KB'lık veri yığınlarını depolar.

Tanımlar:

  • Anahtarların dizini: anahtar ve başlangıç ​​konumu
  • Chunk, GFS'deki bir depolama birimidir, çoğaltma yönetimi yığınlara göre

3
  • SSTable (İngilizce Sıralanmış Dizeler Tablosu), anahtarlara göre sıralanmış anahtar / değer dizesi çiftlerinden oluşan bir dosyadır.

  • SSTable, hem anahtarların hem de değerlerin keyfi bayt dizeleri olduğu, anahtarlardan değerlere kalıcı, sıralı değişmez bir eşleme sağlar.

  • Dahili olarak, her SSTable bir dizi blok içerir (tipik olarak
    her blok 64KB boyutundadır, ancak bu yapılandırılabilir).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.