NoSQL için kullanım örnekleri [kapalı]


144

NoSQL, son zamanlarda sektörümüzde büyük ilgi görüyor. Ben gerçekten ilişkisel veritabanı depolama üzerinde kullanımı için en iyi kullanım durumlarda insanların düşünce ne ilgilendi. Bir geliştiriciyi belirli veri kümelerinin bir NoSQL çözümüne daha uygun olduğunu düşünmeye iten şey nedir? Ben özellikle PHP geliştirme ile ilgili en fazla kapsama almak gibi görünüyor MongoDB ve CouchDB ilgileniyorum ve bu benim odak noktasıdır.


6
Cassandra ve MongoDB tamamen farklı ürünlerdir - tamamen farklı kategoriler . Bu soru, belirli bir veritabanı türü (OODB, DODB, DKVS, vb.) İçin kullanım durumları hakkında soru sorarsa cevaplamak daha kolay olurdu . BerkleyDB gibi bir şey veya bir ağ paylaşımında oturan bir sürü düz dosya olabilir.
Aaronaught

@Aaronaught farkları takdir, sanırım nosql ile bir şemsiye terim kullanmaktan suçluyum
robjmills

Yanıtlar:


86

Sadece ilişkisel bir veri modelini asla MongoDB veya CouchDB gibi bir NoSQL veritabanıyla eşleştirmeye çalışmadığınıza söz verin ... Bu, geliştiricilerin ortaya çıkan teknolojiyi değerlendirirken yaptıkları en yaygın hatadır.

Bu yaklaşım, bir araba almak ve onu bir at gibi arabadan aşağı çekmek için kullanmaya çalışmaktır.

Tabii ki herkesin deneyimi nedeniyle doğal bir tepki, ancak bir belge veritabanı kullanmanın gerçek değeri, veri modelinizi basitleştirebilir ve bir geliştirici olarak acılarınızı en aza indirebilir. Kod tabanınız küçülecek, hatalarınız daha az ve daha kolay bulunacak, performans harika olacak ve ölçek çok daha kolay olacak.

Bir Joomla kurucusu olarak önyargılıyım :-) ama CMS uzayından geliyorum, MongoDB gibi bir şey, içerik belge sistemlerine çok doğal olarak eşlendiği için gümüş bir kurşun.

MongoDB için bir başka harika durum, MongoDB'nin özellikle eşzamanlılık konusunda çok güçlü bir performansa ve ölçeğe sahip olması nedeniyle gerçek zamanlı analitiktir. MongoDB.org web sitesinde bu özellikleri gösteren vaka çalışmaları bulunmaktadır.

Her veritabanının kendi amaçları ve kullanım örnekleri olduğu fikrine katılıyorum; değerlendirme için her bir veritabanının amacını kullanın.


1
gerçekten iyi bir şekilde söylenen spacemonkey, görüldüğüm pozisyonla aynı konumdayım, açıkça yeni bir şekilde düşüneceğiz ve kendimize uygulama verilerimi nasıl bir belge yapısına nasıl yapılandıracağımı sormalıyız, kendimizi RDBMS düşünme biçiminden bu analiz
on_



8

NoSQL hakkında sevdiğim şey performans ve kullanılabilirlik ile ilgili her şeyle ilgisi yok. Atomik veri birimleriniz belge benzeri olduğunda belge depolarıyla çalışmak daha kolaydır, çünkü nesnelere ve nesnelerden serileştirmek önemsizdir. Sadece daha eğlenceli ve kişisel veya yan projeler için önemli bir faktör.


1
Tam olarak önemsiz olduğunu söyleyemem , ancak bu aksi takdirde Belge Odaklı Veritabanları için iyi bir nokta. Bunun tersi diğer bazı NoSQL ürünleri için de geçerlidir - DKVS'lerin eşlenmesi SQL / ilişkisel DB'lerden daha zor olma eğilimindedir .
Aaronaught

8

Bir süredir NoSQL DB kullanıyorum ve bu konuya katkıda bulunuyorum:

Bir harika bir kullanım durumu bir NoSQL veritabanı için bir uygulamadır istatistik ve / veya raporlar nesil verileri üçüncü taraf kaynaktan temin edilir, expecially.

Böyle bir durumda bir NoSQL veritabanı mükemmel bir seçim olabilir

Örneğin, MongoDB'yi ele alalım :

Eğer JSON verilerinizi aldıktan sonra (bir üçüncü taraf API gelebilir veya bir sql-uygulamadan ihraç edilecek) içinde MongoDB oldukça edilir ithalat strightforward ve güncellemek JSON verilerini veritabanında; örneğin komut satırı mongoimportyardımcı programını kullanma

Bu noktada, bu tür uygulamalara çok uygun olan filtreleme ve gruplama ile dinamik sorgular oluşturmak çok basittir .

Örneğin, Toplama Çerçevesi'ni kullanarak :

$pipeline = [];

//filter by date
$pipeline[] = [ '$match' => [ 'created_at' => [ '$gte' => $starDate, '$lte' => $endDate ]  ]  ];

//if we want to filter by a specific field, we add the filter to the pipeline array
if( $filters->isFilterByField() )
    $pipeline[] = [ '$match' => [ 'field' => $fieldValue ] ];    

//group the results by date and get the count
$pipeline[] = [ '$group' => [ '_id' => '$created_at', 'num_elements' => [ '$sum' => 1 ] ] ];

return $collection->aggretate( $pipeline );

Ben pham veri yapıları kullanarak ve sorgu oluşturmak için sıkıcı dize birleştirme kaçınarak dinamically filtreleri eklemek / kaldırmak hangi kolaylığı işaret etmek istiyorum . Bu yaklaşımla, dinamik olarak filtreleri eklemek / kaldırmak, bir diziden eleman eklemek / çıkarmak kadar kolaydır

Bir başka büyük fayda, böyle bir çözümün , ihtiyaç duyduğumuz tüm verileri elde etmek için farklı tablolarla birleştirmemiz gereken ilişkisel bir veritabanı kullanmaktan daha hızlı olması gerçeğinden kaynaklanmaktadır.

Ayrıca, NoSQL veritabanının tüm temel sınırlarından kaçındığı için bu kullanım durumu en uygunudur :

  • İşlem eksikliği: Uygulama yazma gerçekleştirmez, sadece okur, bu nedenle işlemlere hiç ihtiyacımız yok

  • Tablolar arasında birleşme olmaması: Birleştirmeye ihtiyacımız yoktur, çünkü koleksiyonlardaki normalize edilmemiş verilerimizi depolamak için artıklık kullanabiliriz . Yalnızca verileri okuduğumuz için, normalleştirilmemiş verileri güncellemeler arasında senkronize etme konusunda endişelenmemize gerek yoktur.

Bu şekilde , verileri tekil koleksiyonlara odaklanacak şekilde sorgularımıza tam olarak uyacak şekilde yedekli olarak depolamaya odaklanabiliriz.

Bunu sadece yazıyorum çünkü birkaç kez önce böyle bir şey okumuş olsaydım, araştırma yapmak için biraz zaman kazanmış olurdum

Umarım birisi için yararlı olur


3

Martin Fowler'ın bu konuşmasını şiddetle tavsiye ediyorum:

https://www.youtube.com/watch?v=qI_g07C_Q5I

ÖZET: Martin, NoSQL veritabanlarına hızlı bir giriş yapar: nereden geldikleri, kullandıkları veri modellerinin doğası ve tutarlılık hakkında farklı düşünmeniz gerekir. Bundan, bunları nasıl kullanmanız gerektiğini, ilişkisel veritabanlarını neden eskimiş hale getirmeyeceklerini ve çok dilli kalıcılığın önemli sonucunu özetliyor.

İlişkisel veri tabanları dünyasından gelirken, NoSQL'in ne olduğu, farklı kategoriler ve herkesin anlaması gereken şeyler hakkında güzel bir resim çiziyor. Saygılarımızla.


Anlaşıldı, gelecek için akılda kalacak.
user3631881

3

Öncelikle CAP (Tutarlılık, Kullanılabilirlik ve Bölümleme, üçten ikisini almak zorundasınız) teorisini ve İşletme kullanım durumumuzu anlamalısınız. MongoDB Tutarlılık ve Bölümleme'yi tatmin eder & Couch DB, Kullanılabilirlik ve Bölümleme'yi tatmin eder.

YouTube'da NoSQL ile ilgili Edureka videoları en iyi video eğitimlerinden bazılarıdır.

https://www.youtube.com/watch?v=gJFG04Sy6NY

https://www.youtube.com/watch?v=KSq6tMMXZ8s

https://www.youtube.com/watch?v=3z1KFA2qcSo

İyi sunumlar slideshare.net adresinde mevcuttur.

http://www.slideshare.net/quipo/nosql-databases-why-what-and-when?qid=3bb9f7f6-a53d-41b1-8403-cd6f181d0ca7&v=qf1&b=&from_search=1

http://www.slideshare.net/EdurekaIN/no-sql-databases-35591065?qid=f1b9c095-6d70-4d0a-91da-1df664c4f389&v=qf1&b=&from_search=3 (Bu sunum youtube'da video eğitimini destekler)


1

İhtiyacınız olan bazı kullanım durumları için, özellikle analitik sorgular için , Postgres'in bu paketleyicisiyle MongoDB'de SQL sorguları çalıştırabilirsiniz .


1

Artık piyasada her zamankinden daha fazla NoSQL veritabanı bulunduğundan, destek, genişletilebilirlik, yönetim ve benzeri kurumsal uygulamalar için de harika olacak bir veritabanı arıyorsanız Gartner Magic Quadrant'a bakmanızı öneririm. maliyet.

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

Henüz denememiş, ancak raporda (2.5.1) gösterilen sürüme dayanmayan Couchbase'i önermek istiyorum, çünkü CB Server'ın bugünün arkasında neredeyse 2 revizyon, 2H15'te 4.0 sürümüne yaklaşıyor .

http://www.couchbase.com/coming-in-couchbase-server-4-0

Couchbase'in bir satıcı / ürün olarak ilgili diğer kısmı, çok amaçlı bir DB türü olmasıdır. Saf bir K / V deposu, çok boyutlu ölçekleme ile Belge Odaklı Veritabanı, Memcached, kalıcılık ile önbellek kenarı gibi davranabilir ve otomatik birleştirmelerle ANSI 92 uyumlu SQL'i destekler, bir düğmeye basarak DR kümelerine çoğaltma ve hatta ekosistemde yerleşik bir mobil bileşen vardır.

Başka bir şey yoksa, en son karşılaştırmaları incelemeye değer:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

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.