Couchbase滞后和观点

时间:2013-02-01 22:38:50

标签: mapreduce couchbase

我认为Couchbase可以解决当前项目中的很多问题,但我需要先确定一些基本的事情:

1)假设我有一个包含10个节点的集群,我向节点A添加了一个文档。然后我向节点B询问该文档,我肯定会收回该文档吗?是否存在我问节点B并且它认为该文档不存在的风险?

2)现在说我写了一个视图,以便我可以看到某个作者的所有文档。我向节点A添加了一个文档。我知道该文档在被索引时出现在视图中有一定的延迟时间。我想知道的是滞后时间非常小,因为我只索引1个文档?

基本上我有一个管理大约1亿份文件的网站。任何时候都有成千上万的用户,因此大约有10到20台服务器在运行。使用当前的体系结构,如果我将文档插入节点A,当我查找该文档时,我可能正在访问节点B以获取它。所以我的整体问题是:

用户将文档插入节点A,然后向他们显示所有文档的屏幕。如果我使用的是Couchbase,则此屏幕将是查询以作者为中心的视图的结果。用户无法看到他们刚刚发布的文档的可能性有多大?

2 个答案:

答案 0 :(得分:2)

  1. 无论您询问哪个节点,您都可以随时获取文档。如果您使用其中一个Couchbase SDK,那么他们将始终确保他们询问具有该文档的节点。如果你使用moxi,它会做同样的事情,所以你不必担心这个。

  2. 这取决于您的写入工作量有多重。在当前体系结构(2.0)中,文档必须在索引之前访问磁盘。如果您的写入工作量很大,则滞后会增加,因为需要将更长的项目行写入磁盘。我建议针对此用例考虑您的特定应用程序需求的基准测试,并在Couchbase论坛上发布您遇到的任何问题。

  3. 此外,您还需要查看具有持久性要求的命令,并在将陈旧查询参数设置为false的情况下执行查询。持久性命令将允许您让应用程序阻止,直到某个项目到达磁盘并执行陈旧设置为false的查询将确保您的视图是最新的,并将最新项目放入Couchbase。此过程将确保您的用户始终能够看到您的最新结果

    编辑:Couchbase 3.0不再需要在查询之前将项目保留到磁盘。

答案 1 :(得分:0)

查看更新是一个可调参数。默认情况下,线程每5秒唤醒一次,检查更改并在找到它们时更新索引。调整这些参数或使用视图参数stale=false进行查询。

来自"自动索引更新":

下的文档

除了可配置的更新间隔外,您还可以在后台自动更新所有索引。您可以通过两个参数配置自动更新,更新时间间隔(以秒为单位)以及在视图引擎更新索引之前发生的文档更改数。这两个参数是updateInterval和updateMinChanges:

  • updateInterval:以毫秒为单位的时间间隔,默认为5000毫秒。在每个updateInterval中,视图引擎检查磁盘上的文档突变数是否大于updateMinChanges。如果为true,则触发视图更新。存储在磁盘上的文档可能会滞留在内存中数十秒的文档。
  • updateMinChanges:重新编制索引之前发生的文档更改次数,默认为5000次更改。

http://docs.couchbase.com/admin/admin/Views/views-operation.html