gpt4 book ai didi

java - OpenCmis 查询比 apache cmis Workbench 慢

转载 作者:行者123 更新时间:2023-11-30 02:34:21 25 4
gpt4 key购买 nike

我做了非常简单的查询

SELECT cmis:objectId, cmis:name, cmis:parentId
FROM cmis:folder
ORDER BY cmis:name

使用 apache cmis Workbench 运行此查询大约需要 15 秒使用 opencmis 运行相同的查询非常快,但完成结果却非常慢 ~ 3 分钟。

session.query( queryStmt, false).iterator().toList()

通过像这样拆分调用

def rs = session.query( queryStmt, false)
def iterator = rs.iterator()
def folders = iterator.toList()

我能够确定 toList() 速度较慢。但我不明白为什么。

我还尝试定义一个操作上下文并将其与查询一起使用。结果相同。这是我的操作上下文

def filter = "cmis:objectId,cmis:name,cmis:parentId"
def context = session.createOperationContext()
context.setCacheEnabled(false)
context.setFilterString(filter)
context.setRenditionFilterString(filter)

知道如何更快地执行此查询吗?

最佳答案

默认情况下,CMIS Workbench 仅获取前 100 个点击。根据存储库的不同,这通常很快。增加“最大点击数”以获得更多。

要复制 CMIS Workbench 正在执行的操作,请尝试以下代码片段:

String queryStmt = "SELECT cmis:objectId, cmis:name, cmis:parentId FROM cmis:folder ORDER BY cmis:name";
int maxHits = 100;

OperationContext context = session.createOperationContext();
context.setMaxItemsPerPage(maxHits);

session.query(queryStmt, false, context).getPage(maxHits).iterator().toList();

toList 迭代查询的所有结果。默认的OperationContext定义了100个命中的批处理。也就是说,在底层 OpenCMIS 将对存储库进行多次(可能是多次)查询调用,请求前 100 个命中、第二个 100 个命中、第三个 100 个命中,...

如果您总共有 100 万次点击,最终会产生相当多的后端调用。

尝试使用 context.setMaxItemsPerPage(1000000) 增加批量大小。如果您有很多点击并希望将它们全部作为列表,这通常会更快。

当您在循环中使用它们并且不需要一次全部使用它们时,小批量会更好。它还允许处理不适合客户端内存的结果集。

还有另一个方面:摆脱 ORDER BY 并稍后在 Java 中对列表进行排序。不管怎样,你的内存中已经有结果集了。如果存储库在 cmis:name 上没有索引,则可能会减慢服务器端的查询处理速度。

关于java - OpenCmis 查询比 apache cmis Workbench 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43501186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com