我知道这是关于这个主题的另一个问题,但我是NoSQL世界的一个完全的初学者所以我会喜欢一些建议。 SO的人告诉我MySQL可能对这个数据集不好,所以我问这个。我有以下格式的大量数据:
TYPE 1
ID1: String String String ...
ID2: String String String ...
ID3: String String String ...
ID4: String String String ...
我希望转换成这样的东西:
TYPE 2
ID1: String
ID1: String
ID1: String
ID1: String
ID2: String
ID2: String
这是最低效的方式,但我需要能够通过键和值进行搜索。例如,我的查询看起来像这样:
我希望在没有将Type 1转换为Type 2的情况下实现这一点,因为空间要求很高,但是想知道是否有MongoDB或CouchDB或其他东西(有人建议NoSQL这样开始谷歌搜索,发现这两个非常受欢迎)在这种情况下会帮助我。我可以使用一个14节点集群,但我会喜欢一些关于哪个是这个用例的正确数据库的建议。有什么建议吗?
一些额外的事情:
答案 0 :(得分:3)
MongoDB将允许您在类型1中有效地存储此数据。根据您的使用情况,它将看起来像这样(数据是JSON):
字符串数组
{ "_id" : 1, "strings" : ["a", "b", "c", "d", "e"] }
KV字符串集
{ "_id" : 1, "s1" : "a", "s2" : "b", "s3" : "c", "s4" : "d", "s5" : "e" }
根据您的查询,我可能会使用字符串数组方法。原因如下:
我可能需要知道所有字符串 给定的ID包含然后相交 获得另一个列表的列表 对于不同的身份证。
这很简单,您可以获得一个ID值的Key Value查找。在代码中,它看起来像这样:
db.my_collection.find({ "_id" : 1});
我可能需要知道所有ID包含给定字符串
同样容易:
db.my_collection.find({ "strings" : "my_string" })
是的,这很容易。我知道“字符串”在技术上是一个数组,但MongoDB会将该项目识别为数组并循环查找该值。这是are here的文档。
作为奖励,您可以索引“字符串”字段,您将获得数组的索引。所以上面的查找实际上会执行得相对较快(明显的权衡是指数会非常大)。
就扩展而言,14节点集群可能几乎是矫枉过正。但是,Mongo确实支持自动分片和复制集。他们甚至一起工作,这里是blog post from a 10gen成员,让你入门(10gen使Mongo)。