【问题标题】:Can I really persist data on disk using couchbase我真的可以使用 couchbase 将数据保存在磁盘上吗
【发布时间】:2015-10-13 07:14:07
【问题描述】:

我有很多数据需要存储在磁盘上。 由于只是键值对,所以我想用 couchbase 来做。

数据为几 GB,我只为存储桶分配了 1 GB RAM。 我虽然 RAM 到 couchbase 只是一个缓存。 但插入大量数据后,我得到了:

Hard Out Of Memory Error. Bucket "test2" on node 100.66.32.169 is full. All memory allocated to this bucket is used for metadata.

当我打开 couchbase 网络控制台时。

couchbase 可以作为数据库在磁盘上存储数据吗?还是面向 RAM 的?

更新:

好的,让我把问题说得更具体一点: 在沙发上:

  1. 如果我将存储桶的 RAM 分配为 1 GB,我可以将 10 GB 的数据存储到该存储桶吗?
  2. 如果我能做到 1. ,我是否可以认为 1 GB RAM 是 10 GB 数据的一种缓存(就像 CPU L2 缓存是 RAM 的缓存一样)?

【问题讨论】:

  • 1.是的 2. 1GB 将分配给 Couchbase 中该存储桶的内置托管缓存。 Couchbase 的数据服务是托管缓存和持久层的层合并,以构成数据库。

标签: couchbase


【解决方案1】:

默认情况下,Couchbase 将所有键(和一些元数据)存储在 RAM 中,并用值填充剩余的任何内容。从 3.0 版本开始,您可以将存储桶设置为完全驱逐模式,该模式仅将缓存文档的密钥保留在 RAM 中。这使您可以存储比内存更多的数据,但会以某些读取操作的性能为代价,尤其是尝试检索不存在的键。

要解决您的特定问题,请编辑存储桶并将其设置为完整的元数据逐出。请注意,这将重新启动存储桶。

【讨论】:

    【解决方案2】:

    Couchbase 尝试将尽可能多的“实时数据集”(即最常用/请求的键)保留到节点的内存中。这是数据库性能的关键,也是设计的一部分,因此节点的内存大小和存储桶的配额是关键。

    它确实提供了持久性,但我想说这不是面向磁盘优先的数据库。

    持久化到磁盘主要用于两件事:使数据持久且具有弹性以应对节点关闭(当然)以及将数据(优先使用最少的数据)从 RAM 卸载到磁盘。

    【讨论】:

    • 我可以认为couchbase中的RAM是一种缓存吗?
    • 这就是精神,是的......请参阅 David Ostrovsky 对您更新问题的回答;)
    【解决方案3】:

    我想你在这里问了很多不同的问题。 特别是关于错误消息:看起来您的存储桶太小,无法容纳您存储在其中的所有数据。

    关于持久化到磁盘:您可以强制 couchbase 写入磁盘(甚至配置文档复制到的节点数)但如上所述,这可能会稍微损害您的性能.

    例如,看看 couchbase 的 python 客户端的 set() api 中的 persist_to 标志。

    couchbase client for python

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      相关资源
      最近更新 更多