我需要将大量数据存储在磁盘上。 由于它只是键值对,我想使用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?
更新
好的,让我更具体地提出问题: 在沙发基地:
答案 0 :(得分:1)
默认情况下,Couchbase将所有密钥(和一些元数据)存储在RAM中,并使用值填充剩余的所有密钥。从3.0版开始,您可以将存储桶设置为完全逐出模式,该模式仅将缓存文档的密钥保存在RAM中。这使您可以存储比内存更多的数据,但代价是某些读取操作的性能,尤其是尝试检索不存在的密钥。
要解决您的具体问题,请编辑存储桶并将其设置为完全元数据驱逐。请注意,这将重新启动存储桶。
答案 1 :(得分:0)
Couchbase试图尽可能多地保留&#34;直播数据集&#34; (即,最常用/请求的密钥)进入节点的存储器。这是数据库性能和设计的一部分,这对于节点的大小调整和桶的配额是关键。
它确实提供了持久性,但我说这不是面向磁盘的数据库。
磁盘持久性主要用于两件事:使数据持久且对节点关闭具有弹性(当然),并从RAM到磁盘卸载数据(优先级最少的数据)。
答案 2 :(得分:0)
我想你在这里问了很多不同的问题。 特别是关于错误消息:看起来您的存储桶太小而无法容纳您存储在其中的所有数据。
关于坚持光盘:你可以强制couchbase写入光盘(甚至配置文档被复制到的节点数量),但如上所述,这可能会损害你的性能
例如,看看在couchbase的python客户端的set()api中的persist_to标志。