MongoDB vs. Cassandra [kapalı]


738

En iyi taşıma seçeneğinin ne olabileceğini değerlendiriyorum.

Şu anda, verilerimin çoğu JSON bloblarında depolanan, kırılmış bir MySQL (yatay bölüm) kullanıyorum. Herhangi bir karmaşık SQL sorguları (zaten benim db bölümlenmiş beri zaten taşındı) yok.

Şu anda, hem MongoDB hem de Cassandra muhtemelen seçenekler olacak gibi görünüyor. Benim durumum:

  • Her sorguda çok sayıda okuma, daha az düzenli yazma
  • "Devasa" ölçeklenebilirlik konusunda endişelenme
  • Basit kurulum, bakım ve kod hakkında daha fazla endişe
  • Donanım / sunucu maliyetini en aza indirin

4
Resmi bir performans kıyaslama istatistikleri mevcuttur. Cassandra - MongoDB vs HBase
Ravi

1
> Her sorguda çok sayıda okuma, daha az düzenli yazma => CQRS arayın (okumalarınızı büyük olasılıkla olay kaynağı olmadan yazmalarınızdan ayırın, ancak okuma modelinizin zaman uyumsuzluğunu güncelleyip güncelleyemediğinizi kontrol edin .. senkronizasyon da işe yarayabilir .. kullanımınıza bağlıdır
-cases

2
Aslında bu harika bir soru. Acaba güncellenmiş bir sürümü var mı? Bu çok eski
slashdottir

Yanıtlar:


584

Her sorguda çok sayıda okuma, daha az düzenli yazma

Her iki veritabanı, sıcak veri kümesinin belleğe sığdığı okumalarda iyi performans gösterir. Her ikisi de birleşimsiz veri modellerini vurgular (ve bunun yerine denormalizasyonu teşvik eder) ve her ikisi de MongoDB'nin dizinleri şu anda daha esnek olmasına rağmen , belgeler veya satırlar üzerinde dizinler sağlar.

Cassandra'nın depolama motoru, veri kümeniz ne kadar büyürse büysün sabit zamanlı yazma sağlar. Yazmalar, kısmen b-ağacı tabanlı depolama motoru nedeniyle MongoDB'de daha sorunludur, ancak daha çok tanecikli kilitleme nedeniyle daha fazladır .

Analitik için, MongoDB özel bir harita / azaltma uygulaması sağlar; Cassandra, Hive (Hadoop haritası / azaltma üzerine kurulu bir SQL veri ambarı) ve Pig (birçoğunun haritadan / iş yükleri için SQL'den daha uygun olduğunu düşündüğü Hadoop'a özgü bir analiz dili ) dahil olmak üzere yerel Hadoop desteği sağlar . Cassandra ayrıca Spark kullanımını da destekliyor .

"Devasa" ölçeklenebilirlik konusunda endişelenme

Tek bir sunucuya bakıyorsanız, MongoDB muhtemelen daha iyi bir seçimdir. Ölçeklendirmeyle ilgili daha fazla endişe duyanlar için Cassandra'nın tek başarısızlık noktası olmayan mimarisinin kurulumu daha kolay ve daha güvenilir olacaktır. (MongoDB'nin küresel yazma kilidi de daha acı verici olma eğilimindedir.) Cassandra ayrıca çoğaltmanızın nasıl çalıştığı üzerinde, birden fazla veri merkezi desteği de dahil olmak üzere çok daha fazla kontrol sağlar.

Basit kurulum, bakım ve kod hakkında daha fazla endişe

Her ikisinin de kurulumu önemsizdir ve tek bir sunucu için makul varsayılan varsayılan değerlerle birlikte. Endişe edilecek özel rol düğümleri olmadığından Cassandra çok sunuculu bir yapılandırmada kurmak daha kolaydır.

Şu anda JSON blobları kullanıyorsanız, MongoDB, verileri saklamak için BSON kullandığından, kullanım durumunuz için son derece iyi bir eşleşmedir. Mevcut veritabanınızda olduğundan daha zengin ve daha sorgulanabilir verilere sahip olabilirsiniz. Bu Mongo için en önemli galibiyet olurdu.


86
Tamamen farklı, bir yorum yeterince büyük değil, ama ... Cassandra, veri boyutundan bağımsız olarak hızlı yazma özelliklerine sahip, doğrusal olarak ölçeklenebilir (amortize edilmiş sabit zamanlı okuma ve yazma) dinamo / google bigtable hibritidir. Özellik seti minimalist, sıralı bir anahtar değer deposunun biraz ötesinde. MongoDB, dayanıklılığı pahasına, ağır özellikli (ve hızlı) bir belge deposudur ve yazma işlemleri hakkında (diske hemen yazılmadığından) kalıcılığı garanti eder. Farklı felsefelere sahip farklı hayvanlar, MongoDB'nin RDMS değişimine daha yakın ...
Michael

28
Cassandra daha düşük seviyedeyken uber ölçeklendirmesine izin verir (Twitter / Digg / Facebook'a bakın), ancak esnek sorgulamaya izin verilmediğinden verilerinizi nasıl düzenlediğiniz, ikincil dizinler vb. oluşturma konusunda kasıtlı olmanız gerekir.
Michael

11
Herkes Cassandra ile ilgili olarak Twitter'dan bahsettiğinden: Cassandra'yı devam eden tweetler için kullanmıyorlar, burada hala MySQL kullanıyorlar ( engineering.twitter.com/2010/07/cassandra-at-twitter-today.html ). Tamam, ama yine de Cassandra'da başka amaçlar için çok fazla veri depoladıklarını hayal edebiliyorum.
H6.

7
Görünüşe göre küresel yazma kilidi Mongo 2.2'de kaldırılmış olabilir ...
Matt Farmer

16
Projem yayınlanmadan önce bile Mongodb'un acı noktalarını hissediyorum. Etkin yedekleme temel bir gereksinimdir. Bir Linux sunucusunda etkin yedekleme yapmak için, önce bir LVM bölümü (çok yaygın değil) kurmalı ve her yedekleme oturumundan önce bir anlık görüntü almalısınız. Diğer bir kolay yol ise Mongodb ücretli yedekleme hizmetini kullanmaktır. Ancak, bu hizmet pahalıdır (2,3 $ / GB / ay). Yakında hataya dayanıklılık için bir kopyaya ihtiyacınız olacak. Açık kaynak sürümde, düğümler yalnızca açık metin olarak veri alışverişi yapabilir. SSL için Entprise sürümü ile gitmelisiniz. Ve bu 10,000 $. Güle güle Mongodb. Kodumu Cassandra'ya yeniden düzenleme.
Karthik Sankar

146

MongoDB'yi hiyerarşik bir veri yönetim sistemi oluşturarak (son 6 aydır) yoğun bir şekilde kullandım ve hem kurulum kolaylığı (hem kurun, çalıştırın, kullanın!) Hem de hız için kefil olabilirim. Endeksleri dikkatlice düşündüğünüz sürece, kesinlikle hızlı bir şekilde çığlık atabilir.

Cassandra'nın Twitter gibi büyük ölçekli projelerle kullanılması nedeniyle MongoDB ekibi orada parite üzerinde çalışmasına rağmen daha iyi ölçeklendirme işlevselliğine sahip olduğunu düşünüyorum. Cassandra'yı deneme aşamasının ötesinde kullanmadığımı belirtmeliyim, bu yüzden detay için konuşamam.

Benim için gerçek swinger, NoSQL veritabanlarını değerlendirirken sorgulamaktı - Cassandra temelde sadece dev bir anahtar / değer deposu ve sorgulama biraz fiddly (en azından MongoDB ile karşılaştırıldığında), bu yüzden performans için bir tür manuel dizin olarak oldukça fazla veri çoğaltın. MongoDB ise "örnek sorgu" modelini kullanır.

Örneğin, Kullanıcılar içeren bir Koleksiyonunuz (RDMS tablosuna eşdeğer için MongoDB parlance değeri) olduğunu varsayalım. MongoDB, kayıtları temelde ikili JSON nesneleri olan Belgeler olarak saklar. Örneğin:

{
   FirstName: "John",
   LastName: "Smith",
   Email: "john@smith.com",
   Groups: ["Admin", "User", "SuperUser"]
}

Smith adlı Yönetici haklarına sahip tüm kullanıcıları bulmak istiyorsanız, sadece yeni bir belge oluşturursunuz (Javascript kullanarak yönetici konsolunda veya seçtiğiniz dili kullanarak üretimde):

{
   LastName: "Smith",
   Groups: "Admin"
}

... ve ardından sorguyu çalıştırın. Bu kadar. Karşılaştırmalar, RegEx filtreleme vb. İçin ek işleçler vardır, ancak hepsi oldukça basittir ve Wiki tabanlı belgeler oldukça iyidir.


54
Güncelleme (8 Ağustos 2011): Amazon'un İrlanda EC2 veri merkezi dün gece yıldırımla ilgili bir olay yaşadı ve sunucu kurtarmamızı sıralarken, çok önemli bir nokta keşfettim: iki sunucunun çoğaltma kümeniz varsa (ve bunlar kurulumu kolaydır), bir Arbiter düğümünüz olduğundan emin olun, böylece biri düşerse diğeri panik yapmaz ve İkincil modda durmaz! Güven bana, bu büyük bir veritabanı ile çözmek için arkada bir acı.
Richard K.

8
@Richard K'nin söylediklerini eklemek için, çoğaltma kümesinde eşit sayıda düğümünüz (birincil + ikincil) olduğunda hakem düğümünüz olmalıdır.
Amareswar

Buna, veri analizi üzerinde daha fazla toplama yapılacaksa mongodb düşünülür.
user1503117

As long as you think about indexes carefully, it can absolutely scream along, speed-wise.Fiziksel belleğiniz dolana ve işletim sistemi sayfa hatası lol başlayana kadar bekleyin
sturcotte06

117

Neden geleneksel bir veritabanı ile NoSQL veri deposu arasında seçim yapmalısınız? İkisini de kullan! NoSQL çözümleriyle ilgili sorun (ilk öğrenme eğrisinin ötesinde) işlemlerin eksikliğidir - MySQL için tüm güncellemeleri yaparsınız ve MySQL'in okumalar için bir NoSQL veri deposu doldurmasını sağlarsınız - daha sonra her teknolojinin güçlü yanlarından faydalanırsınız. Bu daha fazla karmaşıklık katıyor, ancak zaten MySQL tarafına sahipsiniz - karışıma sadece MongoDB, Cassandra, vb. Ekleyin.

NoSQL veri depoları genellikle aynı spesifikasyonlar için geleneksel bir DB'den daha iyi ölçeklenir - Facebook, Twitter, Google ve çoğu yeni şirketin NoSQL çözümleri kullanmasının bir nedeni vardır. Sadece yeni teknolojilerle uğraşan meraklılar değil.


8
Tamamen katılıyorum. Mimar olduğum yeni ürünlerden birinde mongodb + mysql kullanıyorum. Yaklaşan bir finansal ürün bulutudur. mysql, kesinlikle işlem yeteneklerine ihtiyaç duyduğumuz yerlerde kullanılır. mongodb, sadece gerektiğinde çekilmesi gereken bilgisayar dışı karmaşık veri yapılarını depolamak için kullanılır. şimdiye kadar iyi çalışıyor. :)
Ram on Rails-n-React

Projelerimin çoğunda böyle bir çift yaklaşım kullandım ve bazılarında NFS monte edilmiş dosya sistemi, bazı durumlarda 1 Gb'ye yakın sismik bloblar için PostgreSQL ile birlikte kullanıldı. Yol, anahtar / değer veritabanına yapılan bir sorgu türüdür.
Audrius Meskauskas

1
İşte hem sql hem de nosql veritabanlarını nasıl mimar edeceğim hakkında sorduğum bir soruya bağlantı: dba.stackexchange.com/questions/102053/… Sahip olabileceğiniz bazı bilgileri kullanabilirim
j

O zaten iyi işlemlerden kaçtı => şimdi sonsuz ölçeklenebilirlik mümkün olabilir .. aksi takdirde -> değil :)
bodrin

1
Verileriniz dağıtıldığında bu iyi bir çözüm değildir
Esteban Verbel

60

Muhtemelen dışarıda tuhaf bir adam olacağım, ama sanırım MySQL ile kalman gerek. Çözmeniz gereken gerçek bir sorun tarif etmediniz ve MySQL / InnoDB blob / json verileri için bile mükemmel bir depolama arka ucu.

Web mühendisleri arasında, bir RDBMS'nin tüm özelliklerinin kullanılmadığını fark eder etmez daha fazla NoSQL kullanmaya çalışmak için ortak bir hile vardır. Bu tek başına iyi bir neden değildir, çünkü çoğu zaman NoSQL veritabanları oldukça zayıf veri motorlarına sahiptir (MySQL'in depolama motoru olarak adlandırdığı şey).

Şimdi, bu tür değilseniz, lütfen MySQL'de nelerin eksik olduğunu belirtin ve farklı bir veritabanında (otomatik parçalama, otomatik yük devretme, çok master çoğaltma, daha zayıf bir veri tutarlılığı garantisi) küme, daha yüksek yazma işlemlerinde, vb.


13
Parçalama kullanıyor, bu da verilerinin sunucular arasında manuel olarak bölümlendiği anlamına geliyor. Mongodb, bir avantaj olabilen parçalamayı otomatikleştirebilir.
fabspro

18
Aynı zamanda çoğunlukla JSON kabarcıklarını RDBMS'de saklıyor - ilişkisel tasarımı (özellikleri) işe yaramaz hale getiriyor.
Damir Sudarevic

4
Veri modeli ve otomatik Kırma işlemi gerçekten farklı, ama bir veritabanı seçerken, depolama motoru bakmak gerekir ilk ve ikinci çan ve ıslık geri kalanı. Depolama motoru bir yük artışı altında nasıl performans gösterecek? Otomatik sertleştirme özelliği veri girişi artışında nasıl performans gösterecek? Bu önemli yönler için veritabanına denetimden vazgeçmeden önce, görevin işleyebildiğinden emin olmanız daha iyi olur.
Kostja

7
İlişkisel model, en iyi düşünülmüş, uygulaması verimli ve tutumlu veri modellerinden biridir. "İlişkisel tasarım özelliklerini işe yaramaz hale getirme" kısıtlamalar, tetikleyiciler veya referans bütünlüğü ile ilgili olabilir - ancak bunların hepsi kullanım başına ödeme şeklindedir.
Kostja

20

Cassandra'yı kullanmadım, ama MongoDB'yi kullandım ve harika olduğunu düşünüyorum.

Basit kurulumdan sonraysanız, işte bu: MongoDB'nin yıldızını açıp mongod arka plan programını çalıştırın ve işte bu ... çalışıyor.

Açıkçası bu sadece bir başlangıç, ama başlamanız kolay.


22
AFAIK, aynı şey Cassandra için de geçerlidir. Untar, arka plan programını çalıştırın. Test kümesi hazır ve üretime hazır!
15'te

13

Dün mongodb'da bir sunum gördüm. Kesinlikle kurulum "basit" olduğunu söyleyebilirim, onu açmak ve ateşlemek kadar basit. Bitti.

Hem mongodb hem de cassandra'nın neredeyse her türlü linux donanımında çalışacağına inanıyorum, bu yüzden o bölgede çok fazla engel bulamamanız gerekir.

Bu durumda, günün sonunda, kişisel olarak kendinizi daha rahat hissettiğiniz ve hangisini tercih ettiğiniz bir araç setine sahip olacağınızı düşünüyorum. Mongodb'daki sunumla ilgili olarak, sunum yapan kişi mongodb için araç setinin oldukça hafif olduğunu ve MySQL için mevcut olana benzer çok sayıda (gerçekten herhangi bir dediler) araçların olduğunu belirtti. Bu elbette ki YMMV deneyimleriydi. Mongodb hakkında sevdiğim bir şey, bunun için çok sayıda dil desteği göründüğü idi (Python ve .NET, öncelikle kullandığım iki varlık).

Mongodb kullanan sitelerin listesi oldukça etkileyici ve twitter'ın cassandra kullanmaya geçtiğini biliyorum.


4
Günün sonunda elma vs portakal karşılaştırması. Her iki veritabanının da kendi güçlü yönleri vardır. Dikkate alınması gereken bazı şeyler - Nesne modeli, İkincil indeksler, yazma ölçeklenebilirliği, yüksek kullanılabilirlik vb. Burada mongodb ve cassandra arasındaki üst düzey stratejik farklılıkları açıklayan bir blog yazısı var - scalegrid.io/blog/cassandra-vs-mongodb
Dharshan
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.