Java 批量读取Couchbase文档

Java 批量读取Couchbase文档,java,rx-java,couchbase,Java,Rx Java,Couchbase,我想从Couchbase bucket异步读取大量文档。这是我的代码: JsonDocument student = bucketStudent.get(studentID); 问题是,对于包含大量studentID的大型数据文件,获取这些studentID的所有文档需要很长时间,因为会为每个studentID调用get()方法。是否可以将studentID列表作为输入并返回学生列表的输出,而不是为每个studentID获取单个文档?如果运行查询节点,可以使用N1QL进行此操作。您的查询如下所

我想从Couchbase bucket异步读取大量文档。这是我的代码:

JsonDocument student = bucketStudent.get(studentID);

问题是,对于包含大量studentID的大型数据文件,获取这些studentID的所有文档需要很长时间,因为会为每个studentID调用
get()
方法。是否可以将studentID列表作为输入并返回学生列表的输出,而不是为每个studentID获取单个文档?

如果运行查询节点,可以使用N1QL进行此操作。您的查询如下所示:

SELECT * FROM myBucket USE KEYS ["key1", "key2", "key3"]
SELECT * FROM myBucket USE KEYS ?
实际上,您可能会将字符串数组作为参数传入,如下所示:

SELECT * FROM myBucket USE KEYS ["key1", "key2", "key3"]
SELECT * FROM myBucket USE KEYS ?

您的bucket需要一个主索引,否则类似的查询将无法工作。

如果您正在运行查询节点,则可以使用N1QL进行此操作。您的查询如下所示:

SELECT * FROM myBucket USE KEYS ["key1", "key2", "key3"]
SELECT * FROM myBucket USE KEYS ?
实际上,您可能会将字符串数组作为参数传入,如下所示:

SELECT * FROM myBucket USE KEYS ["key1", "key2", "key3"]
SELECT * FROM myBucket USE KEYS ?

您需要一个bucket的主索引,否则类似的查询将无法工作。

AFAIK couchbase SDK没有用于批量
get
操作的本机函数

node.js SDK有一个
getMulti
方法,但它基本上是对数组的迭代,然后为每个元素激发
get()

我在应用程序中发现,在主索引上,
键值
方法仍然比
选择*
方法快,但N1QL查询非常接近(在couchbase 5.x上)


简单提示:如果您有很多ID要获取,并且决定使用N1QL查询,请尝试将该列表拆分为较小的块。它加快了查询的速度,实际上您可以更好地管理错误,避免出现一些令人讨厌的超时

AFAIK couchbase SDK没有用于批量
get
操作的本机函数

node.js SDK有一个
getMulti
方法,但它基本上是对数组的迭代,然后为每个元素激发
get()

我在应用程序中发现,在主索引上,
键值
方法仍然比
选择*
方法快,但N1QL查询非常接近(在couchbase 5.x上)


简单提示:如果您有很多ID要获取,并且决定使用N1QL查询,请尝试将该列表拆分为较小的块。它加快了查询的速度,实际上您可以更好地管理错误,避免出现一些令人讨厌的超时

默认情况下,Couchbase Java SDK不支持使用文档ID检索多个文档。要实现这一点,您需要使用如下所示的
N1QL
查询

SELECT S.* FROM Student S USE KEYS ["StudentID1", "StudentID2", "StudentID3"]
它将返回具有给定ID的文档数组。使用
com.couchbase.client.java.query.N1qlQuery
构造查询,并使用以下任一选项执行

如果您使用的是Spring的CouchbaseTemplate,则可以使用下面的

List<T> findByN1QL(com.couchbase.client.java.query.N1qlQuery n1ql,
                          Class<T> entityClass)
N1qlQueryResult query(N1qlQuery query)

请注意,您的bucket上需要一个
索引来运行N1QL查询。

默认情况下,Couchbase Java SDK不支持使用文档ID检索多个文档。要实现这一点,您需要使用如下所示的
N1QL
查询

SELECT S.* FROM Student S USE KEYS ["StudentID1", "StudentID2", "StudentID3"]
它将返回具有给定ID的文档数组。使用
com.couchbase.client.java.query.N1qlQuery
构造查询,并使用以下任一选项执行

如果您使用的是Spring的CouchbaseTemplate,则可以使用下面的

List<T> findByN1QL(com.couchbase.client.java.query.N1qlQuery n1ql,
                          Class<T> entityClass)
N1qlQueryResult query(N1qlQuery query)

请注意,要运行N1QL查询,您的bucket上需要一个
索引。

这是正确的,因为在协议级别上没有用于批量操作的本机函数。也就是说,
getMutli
将更快,因为它将同时调度所有的
get
操作。这将减少系统调用的数量和应用程序服务器所需的工作量。在协议级别没有用于批量操作的本机函数是正确的。也就是说,
getMutli
将更快,因为它将同时调度所有的
get
操作。这将减少系统调用的数量和应用程序服务器所需的工作量。