Sql MongoDB或CouchDB或其他什么?
我知道这是关于这个话题的另一个问题,但我是NoSQL领域的一个完全的初学者,所以我希望得到一些建议。SO的人告诉我MySQL对于这个数据集来说可能是个坏主意,所以我问这个问题。我有以下格式的大量数据: 类型1Sql MongoDB或CouchDB或其他什么?,sql,mongodb,couchdb,database,nosql,Sql,Mongodb,Couchdb,Database,Nosql,我知道这是关于这个话题的另一个问题,但我是NoSQL领域的一个完全的初学者,所以我希望得到一些建议。SO的人告诉我MySQL对于这个数据集来说可能是个坏主意,所以我问这个问题。我有以下格式的大量数据: 类型1 ID1: String String String ... ID2: String String String ... ID3: String String String ... ID4: String String String ... 我希望能转化成这样的东西: 类型2 ID1: S
ID1: String String String ...
ID2: String String String ...
ID3: String String String ...
ID4: String String String ...
我希望能转化成这样的东西:
类型2
ID1: String
ID1: String
ID1: String
ID1: String
ID2: String
ID2: String
这是最低效的方法,但我需要能够通过键和值进行搜索。例如,我的查询如下所示:
- 我可能需要知道给定ID包含的所有字符串,然后将该列表与为不同ID获得的另一个列表相交
- 我可能需要知道所有ID都包含一个给定的字符串
- 输入将主要是静态的。我将创建新数据,但不会修改任何现有数据
- ID的长度为40字节,而字符串的长度约为20字节
{u id:1,“字符串”:[“a”、“b”、“c”、“d”、“e”]}
千伏串组
{“\u id”:1,“s1”:“a”,“s2”:“b”,“s3”:“c”,“s4”:“d”,“s5”:“e”}
根据您的查询,我可能会使用字符串数组方法。原因如下:
我可能需要知道所有的字符串是什么
给定的ID包含,然后相交
已获取具有另一个列表的列表
换一个不同的身份证
这很简单,只需查找ID的一个键值。在代码中,它看起来像这样:
db.my_collection.find({u id:1})代码>
我可能需要知道所有ID都包含一个给定的字符串
同样容易:
db.my\u collection.find({“strings”:“my\u string”})
是的,就这么简单。我知道“strings”在技术上是一个数组,但MongoDB会将该项识别为一个数组,并循环查找值。这方面的文件
作为奖励,您可以为“strings”字段编制索引,并在数组上获得索引。因此,上述发现实际上会表现得相对较快(明显的折衷是,指数将非常大)
就扩展14个节点的集群而言,这几乎是过火了。但是,Mongo确实支持自动分片和复制集。他们甚至一起工作,这里有一个成员帮助您开始(10gen制作Mongo)。您希望每个id有多少id和字符串?@methodin:per-id,可能有10-80000个字符串。@methodin:噢,还有,在Type-1中,我有大约200万条记录。如果我把它转换成2型,这个数字将达到40亿。谢谢你的详细解释。