2012-03-06 31 views
0

當有多個用於查詢的列組合時,是否適合MongoDB,因此在所有列上創建索引是不可行的? MongoDB在列上沒有索引並且該列有數百萬條記錄時如何執行?MongoDB vs Columnar

回答

0

如果沒有索引,則執行表掃描,與任何數據庫系統一樣。

如果文檔在內存中,這仍然會相對較快,但仍然需要基於集合中文檔數量的一定時間,因爲數據庫必須查看每個文檔。 O(n)

問題是每個文檔有一組不同的關鍵字,或者每個文檔都必須有大量的關鍵字?

面向列的數據存儲必須存儲大量的列以模擬不同的屬性,但由於文檔數據模型,mongodb更加靈活。

如果您的文檔具有少量不同屬性(超過一大組屬性),則這是可索引的,並且將爲O(logn)。

你的文件應該是這樣的:

{ 
    "name":"some name", 
    "attrs":[ 
    {"n":"subject","v":"the subject"}, 
    {"n":"description","v":"Some amazing description"}, 
    {"n":"comments","v":"Comments on this thing"}, 
    ] 
} 

要轉位是這樣的:

db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1}) 

並且可查詢這樣的:

db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "the subject"}}}) 
+0

什麼我是星型模式。我可以將這個規範化並存儲在柱狀數據庫中,這很好用。每個文檔(行)具有相同數量的屬性。我想要的是能夠做TOP N類型的查詢。我知道新版本中有一些工作正在進行(2.2我認爲 - 聚合),所以,我可以做TOP N,但是我不確定每個屬性的性能是否足夠好因爲我無法在每個屬性上創建索引。我懷疑MongoDB不是我的問題的解決方案,但想看看我是否錯過了一些東西! – PrakashT 2012-03-06 18:07:03

+0

你能用一個你想要做的事情的具體例子更新你的問題嗎? (數據和查詢)我同意索引一切都沒有問題,但也許有另一種方法來模擬數據? – 2012-03-14 01:33:43

+0

在我對MongoDB進行大量數據測試(以及不同的查詢)方面,我意識到MongoDB中沒有壓縮,這對我來說是一個很大的瓶頸。 – PrakashT 2012-03-16 11:03:01