2010-02-28 22 views
13

'a karşı karmaşık sorgular oluşturmak mümkün mü? Ben noSQL DB'yi araştırıyorum ve bunu kendim için tatmin edici bir şekilde yanıtlayamadım: noSQL DB'ye karşı karmaşık sorgular oluşturmak mümkün mü?noSQL DB

select * from DB where 
vara > x AND 
varb = 2 AND 
varc < x AND 
vard in (x,y,z) AND 
vare like '%texthere%' AND 
varf = 2 AND 
varg = 3 and 
etc... 

NOT:

bunu merak ediyorum sorgu tipi böyle bir şey olacağını ben ne soran nasıl ben yukarıdaki SQL kullanamazsınız farkındayım Yukardaki psuedo mantığını, başka bir deyişle farklı koşulların bir demetini kullanarak sorgularım. Şimdiye kadar bulduğum en iyi cevap, sorgulama yapmak için bir RDBMS'ye sahip olmanız ve daha sonra buluttaki anahtarı temel alarak verileri almanızdır. Bu benim için daha verimli görünmüyor.

Bir takip olarak. Sadece 'milyarlarca satırlık veri var' sorununun aksine bir 'arama 4 milyon satır' problemini çözmeye çalışıyorsanız, bir noSQL DB'ye bakmayı bile zahmet etmem gerekir mi?

cevap

9

mongodb olarak, sadece db.mytbl.find({"vara": { $gt: 10}, "varb": 2, "varc": {$lt: 100 }})

böyle bir şey yapsın, ve örnekler

Bu veri deposu size bağlıdır
1

Hayır, bir NoSQL uzmanıyım ama adından da anlaşılacağı gibi, SQL'e gerek duymazlar. Muhtemelen istediğinizi yapabilirsiniz, ancak verileri sorgulamak için harita/küçültme işlevini veya SQL olmayan başka bir yolu kodlamanız gerekecektir.

Belki bu blog sizin için yararlı bilgiler sağlar: here Bkz Query processing for NoSQL database

5

için here kullanıyorlar.

Sık sık AppEngine kullanıyorum ve onların veri deposu sadece bir sütunda eşitsizliğe izin veriyor (ve bu sıralama düzenindeki ilk öğe olmalıdır. Bu nedenle, gönderdiğiniz sorguyu çalıştıramazsınız, ancak benzer bir. Ayrıca

select * from DB where 
vara > x AND 
varb = 2 AND 
varc in (t,u,v,w) 
vard in (x,y,z) AND 
varf = 2 AND 
varg = 3 

, sen gibi şeyler listesinde bir değere sahip dizeleri basıp satırların listesini içeren bir sütunu var yapabileceği

Yani, resmi cevabı "belki, sorta, bazen, ama gerçekten değil, ne zaman evet hariç, "

0

Kanımca, bunu MongoDB gibi bir belge veri deposunda yapabilir, ancak Cassandra gibi bir anahtar-değer veri deposunda kolayca yapabilirsiniz. Bunu anahtar-değer veri deposunda yapacak olursanız, bileşik anahtarın tüm sorgulanan veri öğelerini (sütunları) tanımlaması gerekir. Diğer bir deyişle, bir örnek tüm sorgu sütunlarına sahip olmalıdır. Bu mümkün. Bir vanilya anahtar değer deposunda, anahtar başına bir veri öğesi (sütun) bulunur, ancak birçok kişiyi desteklemek için bunu yapabilirsiniz. Bir anahtar değer deposu buna izin verir çünkü değer sadece bir dize değeridir ve istediğiniz şeyi içerebilir. Anahtar başına birden çok veri öğesi (sütun) öneririm, ancak bunun için programlamanız gerekir. Bunun yerine sütunları farklı sütun örneklerinde varsa, sütunlar sipariş edilmiş olsa bile, verileri dikey olarak aramak çok yavaş olur. Sorunuzdaki örnekte sadece bir tablo var. İlişkisel olarak birden çok tablonuz varsa, anahtar-değer depolarında, birleştirilen verileri depolamak için yeni bir sütun ailesi oluşturmanız gerekir ve yine de anahtar başına birden fazla veri öğesine sahip olmanız gerekir. Bununla birlikte, ETL benzeri bir işlemle bir ailede bir örnekte yatay olarak önceden yüklenmiş olması gerekir. Diğer bir deyişle, verileri anahtar değer deposuna yüklenmeden önce birleştirin ve Cassandra veri deposunu önceden birleştirilen verileri birden çok değer içeren bir sütunda depolayacak şekilde tasarlayın. Veya veri madenciliği kullanın. "Büyük veri analizleri" nin şu anda anahtar sorunlu mağazalarda bu sorunu ele aldığına inanıyorum.Diğer bir örnek, sizinkinden daha az sofistike olup, anahtar-değer mağazalarında müşteri tarafından haftanın sonuna kadar basit bir satış hasılatı ve hacmi raporunu nasıl üretebilirsiniz?