我可以使用couchbase将数据真正保存在磁盘上吗?

时间:2015-10-13 07:14:08

标签: couchbase

我需要将大量数据存储在磁盘上。 由于它只是键值对,我想使用couchbase来实现它。

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

QString oldPath = qgetenv( "Path" );
QByteArray newPath = ( QCoreApplication::applicationDirPath() + ";" + oldPath ).toLocal8Bit();
bool bSet = qputenv("Path", newPath);
if ( !bSet )
{
    qDebug()<<"Failed";
}

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

couchbase可以成为将数据存储在磁盘上的数据库吗?或者它是RAM oritented?

更新

好的,让我更具体地提出问题: 在沙发基地:

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

Couchbase试图尽可能多地保留&#34;直播数据集&#34; (即,最常用/请求的密钥)进入节点的存储器。这是数据库性能和设计的一部分,这对于节点的大小调整和桶的配额是关键。

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

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

答案 2 :(得分:0)

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

关于坚持光盘:你可以强制couchbase写入光盘(甚至配置文档被复制到的节点数量),但如上所述,这可能会损害你的性能

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

couchbase client for python