2016-03-31 21 views
5

Cassandra yeni soru. REST çağrılarını kullanarak bir sosyal ağ sitesinden bazı veriler topluyorum. Bu yüzden JSON formatında geri gelen veriler ile sonuçlanır. JSON, tablomdaki sütunlardan yalnızca biridir. JSON dizesini saklamak için "en iyi uygulama" nın ne olduğunu bulmaya çalışıyorum. Öncelikle haritasının türünü kullanmayı düşündüm, ancak JSON dizeleri, sayısal türleri, vb. Bir karışımını içerir. Harita anahtar/değer için joker türlerini bildirebilirim gibi görünmüyor. JSON dizgisi büyük olasılıkla, büyük ihtimalle 10 KB'nin üzerinde olabilir. Potansiyel olarak bir ip gibi saklayabilirim, ama bu verimsiz gibi gözüküyor. Bunun ortak bir görev olduğunu varsayardım, bu yüzden bunun nasıl yapılacağına dair genel bazı kurallar vardır. Cassandra'nın JSON için yerel desteği olduğunu biliyorum, ancak anladığım kadarıyla, çoğunlukla JSON haritasının tamamı veritabanı şemasıyla 1-1 eşleştiğinde kullanılır. Benim için böyle değil. Şemada bir grup sütun var ve JSON dizgisi bir çeşit "yük". JSON dizesini blob veya "text" olarak depolamak daha mı iyi? BTW, Cassandra versiyonu 2.1.5. Herhangi bir ipucu takdir edildi. Şimdiden teşekkürler.Bir JSON dizesini Cassandra sütununda depolamanın etkili yolu?

cevap

6

sakıncaları vardır metni esas olarak blobları depolar. Ve evet, bahsettiğiniz "yerel" JSON desteği sadece veri modelinizin JSON modelinize uyduğunda ve yalnızca Cassandra 2.2+ sürümünde olduğu içindir.

Bunu bir metin türü olarak depolarım ve verileri gönderirken JSON verilerinizi sıkıştırmak için herhangi bir şey uygulamak zorunda kalmamanız gerekir (ya da sıkıştırmayı açmadan). Cassandra'nın İkili Protokolü, transport compression'u desteklediğinden beri. Ayrıca, tablonuzun her bir okuma isteği için sıkıştırma yapmaya karşı kaydetmek için data compressed'u aynı sıkıştırma algoritmasıyla (LZ4'ü en hızlı algo oluşturduğundan öneririm) sakladığından emin olun. Böylece, sıkıştırılmış verileri depolamak ve aktarım sıkıştırmasını kullanmak üzere yapılandırırsanız, kendiniz bile uygulamak zorunda kalmazsınız.

Kullandığınız İstemci Sürücüsü'nü söylemediniz, ancak burada Datastax Java Client Driver için Aktarım Sıkıştırma ayarlarının nasıl yapılacağıyla ilgili belgeler.

+0

Yanıt için teşekkürler.Cassandra Driver sürüm 2.X ile kalmamı zorlayan Spring Data Cassandra, 1.3.4.RELEASE kullanıyorum. Sürücü sürümü olarak 2.1.9 kullanıyorum. Spring, Küme örneğini oluşturmak için bir fabrika fasulyesi sağlar ve yalnızca sıkıştırmayı veya Snappy'i desteklemiyor gibi görünüyor. Bunu belirleme yöntemi, Enum'u tek argüman olarak alır ve Enum yalnızca bu iki seçeneğe sahiptir. Emin değilim neden. Desteklendiğinden beri şimdi Snappy ile deneyeceğim. Ya da Bahar Verileri Cassandra'yı bırakabilirim ve Kümeyi manuel olarak başlatırım. – user2337270

+1

API için bir yay verisi hayranı değilim, çünkü API, bazı zayıf uygulama kararları veren ilişkisel veritabanları için tasarlandı. Örnekler şunlardır: CassandraOperations.insert (liste nesneler), bir anti-desen olan tüm ekler için bir BATCH ifadesi yapar. Pagable verilerini uygularsanız, bir sayı (*) yapar ve varsayılan olarak, verilerin otomatik olarak taranmasını (Pagable Slices aracılığıyla seçmeniz gerekir) kullanmaz. Bunun yerine, Datastax sürücüsünü kullanmanızı şiddetle tavsiye ediyorum, Cassandra'ya karşı geliştirmek için daha iyi kontrol ve özellikler elde edeceksiniz. – fromanator

+0

Bilinmesi iyi olan @fromanator. Son zamanlarda girdiğim bir başka sınırlama, Spring Data Cassandra'nın DataStax'ın 3.X sürücülerini desteklememesi, bu yüzden şimdilik 2.X'de kaldım. – user2337270

2

JSON'unuzu nasıl sorgulamak istediğinize bağlıdır. 3 olası stratejiler vardır:

  1. Mağaza Seçenek 1 okunabilir insan olma avantajına sahiptir

sorgulayabilir bir damla gibi sıkıştırılmış damla

  • Mağaza gibi bir dize
  • Mağaza olarak sizin cqlsh ile komut satırındaki veriler veya veriyi doğrudan hata ayıklamak istiyorsanız. Bu JSON sütununun boyutu (10k)

    seçeneğidir. Seçenek 2, JSON yükünü küçük tutabilme avantajına sahiptir çünkü metin elemanları oldukça iyi bir sıkıştırma oranına sahiptir. Dezavantajları şunlardır: a. Sıkıştırma/dekompresyon istemci tarafına dikkat etmeniz gerekir ve b. okunabilir değil bir insan direkt

    Seçenek 3 bir damla ve metin arasında büyük bir fark Cassandra beri, gerçekten orada değil Cassandra Depolama motorunda seçenek 1 (boyut) ve 2 (insan okunabilir değil)

  • +0

    İkili Aktarım Sıkıştırma ile birlikte Tablo düzeyi sıkıştırmasını kullanabilmeniz için sıkıştırmayı kendiniz işlemeniz gerekmez. Bu şekilde bir metin veri türü olarak saklayabilir, kaydedildiğinde ve uygulama üzerinden tel üzerinden gönderildiğinde sıkıştırılabilir olmasını sağlayın, böylece kolayca kullanıcı tarafından okunabilir (istemci sürücünüz veya hatta cqlsh sizin için olmayan sıkıştırılmış form). – fromanator

    +0

    Evet, tablo sıkıştırma ve taşıma sıkıştırma seçenekleri de var, +1 – doanduyhai

    İlgili konular