Sql MongoDB或CouchDB或其他什么?

Sql 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

我知道这是关于这个话题的另一个问题,但我是NoSQL领域的一个完全的初学者,所以我希望得到一些建议。SO的人告诉我MySQL对于这个数据集来说可能是个坏主意,所以我问这个问题。我有以下格式的大量数据:

类型1

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都包含一个给定的字符串
我很想在不将类型1转换为类型2的情况下实现这一点,因为纯粹的空间需求,但我想知道MongoDB或CouchDB或其他什么东西(有人建议NoSQL,所以开始谷歌搜索,发现这两种都非常流行)是否能在这种情况下帮助我。我可以利用一个14节点的集群,但是我希望得到一些建议,哪一个是适合这个用例的数据库。有什么建议吗

一些额外的东西:

  • 输入将主要是静态的。我将创建新数据,但不会修改任何现有数据
  • ID的长度为40字节,而字符串的长度约为20字节

MongoDB将允许您在类型1中高效地存储此数据。根据您的使用情况,它将类似于以下内容(数据采用JSON格式):

字符串数组

{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亿。谢谢你的详细解释。