考慮以下數據結構對於一次存儲在數據庫系統(rdbms或nosql)中的數據,QUERY會更好嗎?元數據字段中的字段是用戶定義的,因用戶而異。可能的值是字符串,數字,「日期」或甚至數組。mongodb(或其他nosql dbs)是以下場景的最佳解決方案嗎?
var file1 = {
id: 123, name: "mypicture", owner: 1
metadata: {
people: ["Ben", "Tom"],
created: 2013/01/01,
license: "free",
rating: 4
...
},
tags: ["tag1", "tag2", "tag3", "tag4"]
}
var file2 = {
id: 155, name: "otherpicture", owner: 1
metadata: {
people: ["Tom", "Carla"],
created: 2013/02/02,
license: "free",
rating: 4
...
},
tags: ["tag4", "tag5"]
}
var file1OtherUser = {
id: 345, name: "mydocument", owner: 2
metadata: {
autors: ["Mike"],
published: 2013/02/02,
…
},
tags: ["othertag"]
}
我們的用戶應該有搜索/過濾文件的功能:
- 用戶1:顯示所有文件,其中「湯」是「人」的陣列
- 用戶1:顯示全部創建「2013/01/01至2013/02/01之間的文件」
- 用戶1:在「2012」中標註爲「重要」
- ...
結果應該像這樣,你可以在OS X做智能文件夾進行過濾。各個元數據字段在文件上傳/存儲之前定義。但是之後它們也可能改變,例如用戶1可以將元數據字段「people」重命名爲「cast」。
如果這些字段是可變的,那麼您將無法有效地對字段建立索引,因爲mongodb集合中的索引總數不僅有64個,而且還有一個總體建議對於MongoDb,您可能需要將結構扁平化以在鍵入或索引的集合中具有鍵和值。你有沒有考慮過如何用數據做MapReduce? – WiredPrairie 2013-03-02 13:08:00
我提出一個類型化索引的原因是,所有的特定索引值都是相同的。 – WiredPrairie 2013-03-02 13:10:54