gpt4 book ai didi

sql - MongoDB 或 CouchDB 或其他?

转载 作者:搜寻专家 更新时间:2023-10-30 22:21:07 26 4
gpt4 key购买 nike

我知道这是关于这个主题的另一个问题,但我是 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 包含给定字符串的内容

由于纯粹的空间需求,我很乐意在不将 Type 1 转换为 Type 2 的情况下实现这一目标,但我想知道是 MongoDB 还是 CouchDB 还是其他东西(有人建议 NoSQL 所以开始谷歌搜索并发现这两个非常受欢迎)在这种情况下会帮助我。我可以利用一个 14 节点集群,但希望得到一些建议,了解哪个是适合该用例的数据库。有什么建议吗?

一些额外的东西:

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

最佳答案

MongoDB 可以让您以类型 1 高效地存储此数据。根据您的使用,它看起来像这样(数据在 JSON 中):

字符串数组

{ "_id": 1, "strings": ["a", "b", "c", "d", "e"] }

KV 字符串集

{ “_id”:1,“s1”:“a”,“s2”:“b”,“s3”:“c”,“s4”:“d”,“s5”:“e"}

根据您的查询,我可能会使用字符串数组 方法。原因如下:

I might need to know what all strings a given ID contains and then intersect the list with another list obtained for a different ID.

这很简单,您可以查找 ID 的键值。在代码中,它看起来像这样:

db.my_collection.find({ "_id": 1});

I might need to know what all IDs contain a given string

同样简单:

db.my_collection.find({ "strings": "my_string"})

是的,就是这么简单。我知道“字符串”在技术上是一个数组,但 MongoDB 会将该项识别为一个数组并循环查找值。此文档 are here .

作为奖励,您可以索引“字符串”字段,您将获得数组的索引。因此,上面的查找实际上会执行得相对较快(明显的权衡是索引将非常大)。

在扩展 14 节点集群方面可能几乎是矫枉过正。但是,Mongo 确实支持自动分片和复制集。他们甚至一起工作,这里是blog post from a 10gen帮助您入门的成员(10gen 使 Mongo)。

关于sql - MongoDB 或 CouchDB 或其他?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3844283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com