NOSQL

2010-01-03 28 views
32

ile çalışmaya katılın Bigtable ve NOSQL ile ilgili bazı makaleleri inceledim. JOIN işlemlerinden kaçınmaları çok ilginç.NOSQL

Temel bir örnek olarak, Çalışanlar ve Departman tablosunu ele alalım ve verilerin birden çok tablo/sunucuya yayıldığını varsayalım.

Verilerin birden fazla sunucuya yayılmış olması durumunda, JOIN veya UNION işlemlerini nasıl yapacağız?

+8

* NoSQL * adlı bir üründe * SQL * JOIN veya UNION işlemi ister misiniz? – gbn

+0

Basit, playOrm'u kullanın ve bölümlere katılın (bölümler genellikle 1 milyon satırdan azdır, ancak tablo sonsuz olabilir) ve iyi performans gösterir. –

cevap

4

Birden çok seçim yapmanız ve verileri uygulamanıza el ile eklemeniz gerekir. Daha fazla bilgi için bkz. this SO post. söz konusu yayının Gönderen:

Bigtable veri kümeleri bir SQL bir alt kümesi dayalı olduğu ("gee-kwal") GQL denilen bir dil kullanarak AppEngine'de gibi hizmetlerden sorgulanabilir. GQL'den kayda değer bir şekilde eksik olan herhangi bir JOIN komutu. Bir Bigtable veritabanının dağınık yapısı nedeniyle, iki tablo arasında bir birleştirme yapmak çok verimsiz olacaktır. Bunun yerine, programcı kendi uygulamasında böyle bir mantığı uygulamak zorundadır, ya da ona ihtiyaç duymayacak şekilde onun uygulamasını tasarlamalıdır.

3

Kaleb haklı. Verileriniz bir anahtar-değer deposuna sığmıyorsa, bir NoSQL çözümü ile özel kod yazabilirsiniz. Harita küçültme/asenkron işleme ve özel görünüm önbellekleri yaygındır. Brian Aker Kasım 2009 OpenSQLCamp http://www.youtube.com/watch?v=LhnGarRsKnA'da çok komik (ve hicivli ve yanlı) bir sunum yaptı. Katılma hakkında bilgi almak için 40 saniye içinde atlayın.

+1

+1 iyi dedi ... –

33

Çok büyük verileriniz olduğunda, muhtemelen birleştirmekten kaçınmak istersiniz. Bunun nedeni, bireysel bir tuş aramasının genel yükünün nispeten büyük olmasıdır (hizmetin hangi düğüm (ler) in sorgulanacağını ve bunları paralel olarak sorguladığını ve yanıtları beklemesini beklemesi gerekir). Genel olarak, gecikme demek, üretim sınırlaması değil. Bu kılan

Eğer (birçok durumda) birçok, birçok farklı düğümler için gidiş sona ereceğini yabancı anahtar aramaları, bir sürü yapmak gerekir gerçekten kötü emmek katılır. Yani bunu bir kalıp olarak önlemek istersiniz. Çok sık olmazsa

, muhtemelen hit alabilir, ancak bunlardan bir sürü yapmak istiyorum gidiyoruz eğer, verileri "denormalising" değerinde olabilir.

NoSQL depolarında depolanan türden şeyler genellikle ilk sırada oldukça "anormal" dir. Aramaları daha kolay hale getirmek için aynı verileri her türlü farklı yerde çoğaltmak nadir değildir.

Ayrıca çoğu NoSQL (gerçekten) Eğer diğer herhangi bir kriter sorgulamak istiyorsanız şeyler çoğaltmak zorunda anlamına gelir ya ikincil dizin desteklemez.

Çalışanlar ve bölümler gibi verileri depolıyorsanız, geleneksel bir veritabanıyla gerçekten daha iyi durumdasınız.

+1

+1 iyi video için – gbn

+4

Ben bu anlamaya çalışırken bu bağlantı yardımcı oldu: http://www.allbuttonspressed.com/blog/django/2010/09/JOINs-via- NoSQL kodlayıcılar-Part-1-Intro –

-1

İKİ ÇOK BÜYÜK veri kümelerine katılmak istiyorsanız, bazı yorumlara katılıyorum. Ama noSQL'de, playOrm'u da kullanabilir ve 1 trilyon işlem yapabilir, ancak 1 milyar bölüme sahip olabilirsiniz ve daha sonra bölümlere bir başka şeyle katılabilirsiniz. Bu kullanım durumu aslında çok geniş yayılıyor.

Bunu yapan bir müşterimiz vardı ve hesabı 4564 numaralı hesaba ayırıp bu bölüme sorgulama yapabilir ve başka bir küçük tablo veya başka bir büyük tablo bölümü ile birleştirebiliriz.

playOrm, basit JQL/HQL dili ile bir araya gelmeyi ve yakında da geçici bir sorgulama aracı haline getirmeyi mümkün kılıyor.

sonra Dekan

+0

için denormalizasyon Bence bu kurumsal kullanıcılar için iyi bir seçenek değil. Araç/dil sizin tarafınızdan geliştirildi, (Github repo ile yargılanarak) 3+ yıl içinde güncellenmedi ... Endüstrinin kendinize "evet" dediği yerde "hayır" diyor. Bu ipuçlarını takip ederseniz, dikkatli olun. –

+0

Endüstri, hazırda bekletme özelliğini kullanarak tamamen farklı bir yoldan geçerken EJB2'ye de gitti. Sonunda endüstri EJB2'nin berbat olduğunu fark etti. Bir şeyleri sektöre dayandırmayın ve 'insanlar' demek benim düşüncemdir (sevmediğim için sevindim). Kendi kararlarını ver. Şükür EJB3 sonunda hibernate kopyaladı (tür). Bu proje cassandra protokollerini değiştirdiğinde sona erdi ve bunu güncellemek için zamanım olmadı. Yaptığım birkaç noSQL projesi için gerçekten işe yaradığı için bir gün yaşayabilirim. Twitter, biz bugünlerde bazı benzer şeyler yapmak ama el ile (ve daha fazla iş :(). –

+0

EJB2 (oldu) sadece kalıcılık fasulye değil ... ayrıca, EJB3 ve Hibernate aslında "birleştirilmiş" JPA Hibernate bir arabirim belirttikten sonra "birleştirildi" uygulandı - King bile JPA ile yardımcı oldu.Yani, iyi bir seçim olan hazırda bekletmeyi seçtiniz, yarattığınız gibi 1 kişilik bir proje değil, projenizin kötü kod veya uygulamalar içerdiğini söylemiyorum. Yazılım bağımlılıklarını çözmek için başka bir yere bakmak için genel bir prensip olmalıdır. –

0

Bu eski bir soru olduğunu biliyorum, ama bir "NoSQL" veritabanını olurken Couchbase, var olduğunu söylemek nekro değer olabilir bu yüzden, Google'da üst bir sonuç joins olan N1QL adlı bir SQL uygulaması. Ve belirli durumlarda oldukça performant olabilirler.