考虑以下数据结构对于一次存储在数据库系统(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