Couchbase 获得强烈一致的观点

Couchbase 获得强烈一致的观点,couchbase,Couchbase,我刚开始使用couchbase,并希望将其用作我的数据存储 我的要求之一是执行查询,该查询将返回有关存储中所有文档的特定字段。此查询在服务器启动时执行一次。 为此,我需要所有现有的文件,不能错过任何文件。 我知道couchbase中的视图最终是一致的,但我仍然希望这个查询能够完成(以性能为代价) 有关我的配置的注意事项: 我只有一个couchbase服务器实例(我不需要分片或 复制) 我正在使用java客户端(1.4.1) 我尝试这样保存文档: client.set(key, value,

我刚开始使用couchbase,并希望将其用作我的数据存储

我的要求之一是执行查询,该查询将返回有关存储中所有文档的特定字段。此查询在服务器启动时执行一次。 为此,我需要所有现有的文件,不能错过任何文件。 我知道couchbase中的视图最终是一致的,但我仍然希望这个查询能够完成(以性能为代价)

有关我的配置的注意事项:

  • 我只有一个couchbase服务器实例(我不需要分片或 复制)
  • 我正在使用java客户端(1.4.1)
我尝试这样保存文档:

client.set(key, value, PersistTo.ONE).get();
并使用以下命令进行查询:

query.setStale(Stale.FALSE);
添加PersistTo参数导致以下异常:

Cause by: net.spy.memcached.internal.CheckedOperationTimeoutException: Timed out waiting for operation - failing node: <unknown>
  at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:167)
  at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:140)
多谢各位

有可能得到我需要的一致结果吗

是的,您可以通过将STALE标志设置为false,将Couchbase视图设置为一致。但是,这会影响性能,因此根据您的数据大小,查询可能会很慢,如果您每天只执行一次,那么应该可以

Couchbase被设计成一个由多个节点组成的分布式系统,它并不真正适合单节点部署。我读过(但找不到链接),在较大的集群中查看性能要好得多

您还将更多的同步处理模型强制应用到一个具有异步请求的系统上,Persisto可以用于某些请求,但不是每次调用时都可以用于整个系统(个人意见),它肯定会限制吞吐量和性能

如果是的话,我所建议的方法是否正确

您说查询是在应用程序服务器运行后完成的,这是每天一次还是多次?如果一天一次,那么你的应用程序应该工作(我会考虑升级节点);如果你必须做大量的查询,你正在用集合反复敲打这个节点,那么我希望看到你现在正在经历什么。 如何防止这些异常

可能有多种原因,您的计算机、RAM、CPU和磁盘的规格是什么?有多少ram分配给Couchbase,有多少分配给您的bucket,使用了bucket ram的百分之几

当我在一些不太令人惊奇的网络上敲打一些较低端的AWS实例时,我个人就看到了这一点。您使用的是什么版本的Couchbase?这可能是各种各样的因素,应该是一个单独的问题

希望有帮助

编辑有关Stale=false参数的更多信息(来自官方文档)

索引在执行查询之前更新。这可确保视图中包含任何已更新(并保留到磁盘)的文档。客户端将等待索引更新后再执行查询,因此响应将延迟到更新的索引可用为止


您要设置多少个文档,只有一个?请提供您的映射代码。谢谢回复。我在问题中添加了映射。不知道你说的文件数量是什么意思?我有多个文档当您设置文档时,是设置一个文档然后刷新视图,还是设置数千个文档?如果你在一个节点上进行数千次更新,你可能会超时。是的,我正在进行大约3000项更新,只有在这之后,我才重新启动我的应用程序服务器,它会执行查询,并向你提供详细的答案。最后一件事是确保我得到了它:使用stale=false仍然不会导致查询返回磁盘队列中的项目?我添加了一些关于stale标志的附加信息,因此只有持久化的项目才会被索引。谢谢,我现在了解到我的当前配置并不完美,我将尝试进行适当的调整。好的,很酷,很高兴听到,如果这回答了您的问题,您可以将其标记为已回答:)
function (doc,meta) {
    if (doc.doc_type && doc.doc_type == "MyType" && doc.myField) {
        emit(meta.id,null);
    }
}