【问题标题】:parallel DB requests to Couchbase from Node.js SDK从 Node.js SDK 到 Couchbase 的并行数据库请求
【发布时间】:2014-05-29 14:30:25
【问题描述】:

我希望在短时间内(比如半毫秒)向 Couchbase 商店发出几个 Get 请求。

我不能使用 multiGet,因为我没有同时拥有所有密钥。

但是,如果我一个接一个地发出多个单独的 get 请求,我相信它们会一次处理一个,如http://docs.couchbase.com/couchbase-devguide-2.5/index.html#retrieving-multiple-keys 中所示。

我也许可以做的一件事是使用在启动时为每个 Get 请求创建的单独的 Connection 对象,但我没有看到任何地方都推荐这样做作为最佳实践。

这是否可行,即允许我快速并行执行 Get's,这是推荐的做法吗?

【问题讨论】:

    标签: node.js performance concurrency parallel-processing couchbase


    【解决方案1】:

    不要进行单独的连接,我不建议这样做。它只会增加数据库的额外负载。您可以为其他数据库添加连接,但不能为同一个数据库添加连接。

    你有几个选择:

    1. 只要您知道多个键,就可以提出多个请求。正如你所说,这可能无法很好地扩展。我建议你试试这个并测试它,看看它是如何进行的,因为它最容易实现。如果它符合要求,则使用它。幸运的是,Node.js 中的请求实际上是异步的,所以它们实际上是并行完成的,而且文档重点是非异步编程语言,所以它可能没那么糟糕。但是数据库将不得不做额外的工作。使用此解决方案,您获得单个键值的延迟可能最短。

    2. 如果所有keys来的时间短到半毫秒(真的很短!),就等他们都来了,然后发出一个批量请求。确保你的半毫秒在重负载下不会变成 200 毫秒!如果它总是那么短,那么这将是一个更好的解决方案。

    3. 创建队列并使用混合方法。如果上述建议在所有情况下都不起作用,您可以尝试以下操作:每当您需要密钥时,推入队列。按时间间隔检查队列,将队列中的键放在一起并清除队列。时间间隔可以是 5ms 或 10ms 甚至更多。取决于密钥来的速度以及您需要它们的速度。您已经在不同的设置上测试了这个解决方案,负载很重,以很好地调整它。有了这个,您可以获得单个键值的结果的低延迟,并且不会给数据库增加额外的负载。

    【讨论】:

      猜你喜欢
      • 2017-03-26
      • 1970-01-01
      • 2016-07-13
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 2019-11-26
      • 1970-01-01
      相关资源
      最近更新 更多