Mapreduce Couchbase滞后和视图

Mapreduce Couchbase滞后和视图,mapreduce,couchbase,Mapreduce,Couchbase,我认为Couchbase可能能够解决我当前项目中的许多问题,但有一些基本问题我需要首先确定: 1) 假设我有一个有10个节点的集群,我将一个文档添加到节点a。然后我向节点B请求该文档,我是否一定要回该文档?我询问节点B时,它是否认为该文档不存在 2) 现在假设我写了一个视图,这样我就可以看到某个作者的所有文档。我向节点a添加了一个文档。我知道在索引该文档时,该文档在视图中出现会有一定的延迟时间。我想知道的是,延迟时间是否会非常非常小,因为我只为一个文档编制索引 基本上,我有一个网站,它可以管理大

我认为Couchbase可能能够解决我当前项目中的许多问题,但有一些基本问题我需要首先确定:

1) 假设我有一个有10个节点的集群,我将一个文档添加到节点a。然后我向节点B请求该文档,我是否一定要回该文档?我询问节点B时,它是否认为该文档不存在

2) 现在假设我写了一个视图,这样我就可以看到某个作者的所有文档。我向节点a添加了一个文档。我知道在索引该文档时,该文档在视图中出现会有一定的延迟时间。我想知道的是,延迟时间是否会非常非常小,因为我只为一个文档编制索引

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

用户在节点a中插入一个文档,然后我向他们显示所有文档的屏幕。如果我使用Couchbase,这个屏幕将是查询输入作者的视图的结果。用户看不到他们刚刚发布的文档的可能性有多大

  • 无论您请求哪个节点,都将始终能够取回文档。如果您使用Couchbase SDK之一,那么他们将始终确保询问拥有文档的节点。如果你使用莫西,那么它也会这样做,所以你不必担心这一点

  • 这取决于您的写工作负载有多重。在当前的体系结构(2.0)中,文档在索引之前必须命中磁盘。如果您的写入工作负载很重,那么延迟会增加,因为需要写入磁盘的项目行会更长。我建议在考虑到这个用例的具体应用程序需求的情况下进行基准测试,并在Couchbase论坛上发布您遇到的任何问题

  • 此外,您还需要了解具有耐久性要求的命令,以及在stale query参数设置为false的情况下执行查询的命令。耐久性命令将允许您阻止应用程序,直到某个项目命中磁盘,并且在stale设置为false的情况下执行查询将确保您的视图与放入Couchbase的最新项目是最新的。此过程将确保您的用户始终看到您的最新结果


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

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

    从“自动索引更新”下的文档中:

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

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

    谢谢,我想我只能通过负载测试完全解决问题的第二部分,尽管我想知道是否有人有过类似负载的经验?在我看来,这里的关键信息是您的写入吞吐量。服务器平均每秒处理多少个项目和PEK时间。我认为你没有把这些信息作为问题的一部分。所以我刚刚发现,我们每秒要写10个文档,也许在将来,我可以看到这一数字会上升,但我认为不会超过一个数量级……一般来说,任何低于5k ops/sec的数据都应该在一秒钟内从接收请求的服务器流到磁盘。你可能想做的是看看Couchbase的耐久性要求选项。使用这些选项,您可以指定客户机阻塞,直到将一个集合写入磁盘,这将保证该项将显示在您的下一个查看请求中。