0

Couchbase 是否能够存储多个列表,每个列表包含 100,000-100,000,000 条记录?

记录以“数据系列”方式(或延迟队列)存储并进行相应查询。


例子

列表数据集结构:

  • ID
  • list_id # 记录所属的列表
  • next_check 时间戳
  • 地位
  • 其他一些领域..

典型用例:

选择过去具有 next_check 和特定状态的所有记录。

SELECT * FROM RECORDS
WHERE next_check < now()
  AND status = X
  limit, offset

然后我可以执行几个操作:

  • 使用新的 next_check/status 值更新记录。
  • 或删除记录并插入新记录。

问题

我想了解的是:

  1. 如果 Couchbase 可以处理如此庞大的数据集?
  2. 存储和查询这种结构的最佳方法是什么?
  3. 最后,有没有我需要注意的 Couchbase 限制(即不要使用超过 1000 个存储桶)?

谢谢!

4

1 回答 1

0

为了回答你的问题,我需要描述一些关于 Couchbase 如何工作的事情。

  1. Couchbase 存储 JSON 文档,这些文档支持对象数组、数组或原始值。您可以为每个客户创建一个文档,其中包含一个或多个数组,其中包含与该客户相关的列表。文档的最大大小为 20MB,但通常文档要小得多。尽管如此,听起来 20MB 应该比与客户关联的列表所需的要大得多。或者,您可能希望将列表元素存储为文档本身。您有任何理由为每个客户设置单独的列表吗?Couchbase 中的数据建模与关系数据库中的数据建模一样重要,但过程有些不同。您可以使用自己喜欢的搜索引擎找到有关该主题的几篇不错的博客文章。
  2. 每个文档都作为值存储在键值存储中。检索文档的最快方法是通过其密钥。较慢但仍然相当快的是,在您查询的任何字段上都有一个索引,例如 next_check。Couchbase确实支持数组内字段的索引。与关系数据库一样,访问文档最慢的方法是通过顺序扫描所有记录,如果可以避免,您不想这样做。
  3. Couchbase Buckets 是文档的集合,每个文档都有一个唯一的键。即,一个键空间。一个 Couchbase 集群限制为 10 个存储桶,因此您当然不能拥有 1000 个存储桶。因此,桶更类似于 MySql 或 Oracle 中的“数据库”概念。由于 Couchbase 不强制执行模式,因此 Couchbase 目前没有与关系数据库中的“表”概念等效的概念。

Couchbase 当然可以支持包含数千万或数亿个文档的 Buckets,我的笔记本电脑上有一个包含 3800 万个 1kb 文档的 Buckets。然而,有效的查询需要定义索引以匹配您运行的查询,有足够的内存来保存您的索引和工作文档集,并且可能跨多个节点扩展集群(Couchbase 非常容易)。

于 2017-10-17T17:39:59.133 回答