2012-07-22 68 views
0

比方說,我有10萬份文件,看起來像這樣的集合:這是什麼數據庫? Mongo,SQL,Couch還是其他?

{ 
"_id": "33393y33y63i6y3i63y63636", 
"Name": "Document23", 
"CreatedAt": "5/23/2006", 
"Tags": ["website", "shopping", "trust"], 
"Keywords": ["hair accessories", "fashion", "hair gel"], 
"ContactVia": ["email", "twitter", "phone"], 
"Body": "Our website is dedicated to making hair products that are..."} 

我希望能夠在數據庫中查詢任意數量,包括0,任何標籤,關鍵字和ContactVia的3個屬性。我需要能夠通過ANDS(本文件包括X和Y的兩個屬性)或OR(這個文件包括X或Y的屬性)進行選擇。

查詢示例:

  • 給我說有標籤的網站和 購物前10個文件,用關鍵字匹配的「髮飾或時尚」 ,並與其中「電子郵件」一contact_via。

  • 給我帶有「網站」或 「信任」標籤的第20個文檔,匹配關鍵字「髮膠」或「髮飾品」。

  • 給我50個帶有「網站」標籤的文件。

我還需要通過在文件 (分型)或者其他領域或創建或更新日期訂購。所以基本上有四個「範圍」被定期查詢。

我開始了基於SQL的。然後,我搬到了Mongo,因爲它支持數組和哈希(我喜歡)。但是,它不支持使用索引的多個範圍,所以我的Mongo數據庫很慢。因爲它不能使用索引並且必須掃描1000萬個文檔。

有沒有更好的選擇。這正在推動這個應用程序投入生產(以及隨之而來的收入)。任何關於正確的數據庫或其他架構的想法都將不勝感激。

如果有問題,我在Ruby/Rails中。

+2

你開始有像*站點在標籤查詢..你可能必須去像http://sphinxsearch.com/ – 2012-07-22 16:52:20

+0

我不知道爲什麼你需要支持多個範圍查詢使用索引。如果索引用於多個查詢子句,返回的結果是否仍然很大,以至於無法有效地在內存中進行排序?您的數據集是否足夠大,以至於無法創建與不同查詢對應的多個索引? – 2012-07-22 18:59:53

+0

是與一組關鍵字重疊的標籤集合嗎?或者它們是不重疊的集合?換句話說,一個特定的字符串既可以是關鍵字又可以是標籤? – 2012-07-22 19:02:23

回答

2

當需要做陣列多個查詢,我們找到了最好的解決辦法,至少對我們來說,是去與ElasticSearch。我們得到這個,加上一些其他的獎金。而且,我們可以減少Mongo的索引需求..所以這是雙贏的。

1

我的兩美分是針對MongoDB的。您的數據不僅可以作爲原始Ruby哈希來表示,保存和加載,而且Mongo是現代和快速的,而且真的很容易知道。這裏有所有你需要做的,開始蒙戈服務器:

mongod --dbpath /path/to/dir/w/dbs 

然後拿到控制檯,這僅僅是一個基本的JavaScript控制檯,只需調用mongo。而且使用它是如此簡單:

require 'mongo' 
db = Mongo::Connection.new['somedb'] 
db.stuff.find #=> [] 
db.stuff.insert({id: 'abcd', name: 'Swedish Chef', says: 'Bork bork bork!'}) 
db.stuff.find #=> [{id: 'abcd', name: 'Swedish Chef', says: 'Bork bork bork!'}] 
db.stuff.update({id: 'abcd', {'$set' => {says: 'Bork bork bork!!!! (Bork)!'}}}) 
db.stuff.find #=> [{id: 'abcd', name: 'Swedish Chef', says: 'Bork bork bork!!!! (Bork)!'}] 
+0

我們目前在Mongo。但是,我們無法在沒有大掃描的情況下查詢它,因爲您只能查詢單個範圍並使用索引。它不會創建一個具有多個範圍的索引(數組,排序順序等)。 – Williamf 2012-07-24 03:37:17

相關問題