2013-09-26 16 views
5

Şu anda 100.000'den fazla veriye sahip geniş bir veri satırı olan bir cassandra sütun ailesi var. Şimdi, bu sütun ailede tüm verileri kaldırmak istediğiniz ve sorunu ortaya çıktı: tüm veriler kaldırılırCassandra arama sorgusu büyük veri paketini sildikten sonra oldukça yavaştır

sonra bu sütun ailede bir arama sorgusu yürütme, cassandra dönmek için onlarca saniye alacaktır boş bir sorgu sonucu. Orijinal veri cassandra veritabanından veri silme iken mezar taşı özelliği kaynaklanır

büyük olduğunda Ve zaman maliyeti Doğrusalca artacaktır. Bir sonraki GC yakılana kadar arama hızı normale dönmeyecek. Bkz Cassandra Distributed Deletes.

Bu tür sorgu işlemleri genellikle sistemimde kullanıldığından, büyük gecikmeyi birkaç saniyeye kadar taşıyamıyorum.

Bu soruna bir çözüm önerisi verir misiniz?

+0

Belki kullanmak [zaman serisi modeli] (https://academy.datastax.com/resources/getting-started-time-series-data-mode ling) iyi bir yaklaşım olabilir mi? – deFreitas

cevap

3

Veritabanını kullanmanın çok kötü bir yolu gibi görünüyor. Doldur, boşalt, tekrarla. Sorununuzu çözebilmenin bir yolu, her seferinde farklı CF adlarını kullanmaktır. Verileri boşaltırken ve yeniden oluşturmaya başladığınızda, yeni bir sütun ailesi oluşturun ve bunu kullanın ve diğer sütun ailesini bırakın ancak bu hacky.

Sorununuzu çözmek için sıkıştırmayı (gets rid of all the tombstones it can detect) kullanmanızı öneririm, yoğun CPU'dur ancak sorguların yanıt vermesi için on saniye beklemekten daha iyidir. Muhtemelen zorunda kalacak, böylece gc_grace_seconds varsayılan olarak 10 güne ayarlanır,

./nodetool compact <ks_name> <cf_name> 

Ritchard en nokta iyi bir tanesidir: Sen sıkıştırmak istediğiniz belirli KS & cf sağlayarak görevi daha az yoğun makinenizde yapabilirsiniz Sıkıştırmanın mezar taşlarından kurtulmasına izin vermek için bunu düzeltin.

+1

Sıkıştırma işleminin, mezar taşı eklendikten sonra gc_grace_seconds geçtikten sonra yalnızca mezar taşları kaldırılacağını unutmayın. – Richard

+0

@Lyuben, Sütun ailesinin tamamını boş bırakamıyorum çünkü verileri depolanmış 1000'den fazla kullanıcı var ve bunların her biri 100.000'den fazla veri satırı içeriyor. Her silme işlemi, tek bir kullanıcının verileri üzerinde yürütülür. Sütun ailesindeki ** compact ** işlemi bir seçim olabilir, ancak ** bu işlemi tetikleme zamanı nedir? ** Bir kullanıcı bazı verileri sildikten sonra tetiklenirse, diğer tüm kullanıcıları etkileyebilir. Bu konuda önerin nedir? Tekrar teşekkürler! Ve Richard'a _gc_grace_seconds_'ı hatırlattığı için teşekkürler. Cevabınız için – Fify

0

@Fify

sütun ailesi sık ise modifiye (okuma sonra ... sonra tekrar güncellemeyi okumak güncellemek), silinen sütunları kaldırılır quickier yapmak için leveled compaction strategy

kullanmalıdır , özelliğini değiştirmek gc_grace_seconds sütun ailesinin

+0

teşekkürler. 1) Sütun ailemin en çok kullanılan işlemleri _insertion_, ve sonra _read_, _deletion_ bazen oldu ama çok düşük olasılıkla (100 operasyondan 1'i diyelim).2) ** gc_grace_seconds ** çok kısa olamaz çünkü veritabanında saklanan birkaç TB sayısı vardır. – Fify

İlgili konular