从Node.js SDK到Couchbase的并行DB请求



我希望在很短的时间内,比如在半毫秒内,向Couchbase存储发出几个Get请求。

我不能使用multiGet,因为我不能同时拥有所有的键。

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

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

这是否可行,即允许我快速并行地做Get,这是推荐的事情吗?

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

你有两个选择:

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

  2. 如果所有密钥到达的时间间隔短至半毫秒(这真的是很短的时间!),只需等待它们全部到达并进行批量请求。确保您的半毫秒不会在重载时变成200毫秒!如果总是那么短,那么这将是一个更好的解决方案。

  3. 创建队列并使用混合方法。如果上面的建议不是在所有情况下都有效,你可以试试这个:当你需要钥匙时,把它推到队列中。每隔一段时间检查队列,将队列中的键放在一起并清除队列。时间间隔可以是5毫秒或10毫秒,甚至更长。这取决于键来的有多快以及你需要它们有多快。您已经在不同的设置上对这个解决方案进行了重负载测试,以便对其进行优化。这样,您可以获得获得单个键值结果的低延迟,并且也不会给数据库增加额外的负载。

最新更新