MarkLogic - 自定义休息 GET REST 服务的性能变化
MarkLogic - Performance variation in custom rest GET REST service
MarkLogic 版本 9.0-6.2
我有一个自定义的 rest GET 服务,它接受一个 ID(比方说 PolicyId)和 returns 一个文档(总是只返回 1 个文档)。元素范围索引是在 PolicyId 上创建的。我有 100 个不同的文档,每个 PolicyId 一个。
当我第一次使用 PolicyId 通过 SoapUI 工具调用服务时,我看到响应时间大约为 2 秒,但是从第二次调用开始(即使我尝试使用不同的 PolicyId),我看到响应时间约为 30 毫秒。
现在,如果我关闭 SoapUI 工具并在 1 小时后重试上述步骤,我再次看到第一次调用的响应时间为 2 秒。
我正在尝试了解 MarkLogic 中的行为及其与缓存的关系。为什么我第一次反应慢?即使我提供不同的 PolicyId,我如何从第二次开始获得更快的响应?有没有办法可以提高第一次调用本身的性能?关于更好的 REST API 性能工具有什么建议吗?
非常感谢任何意见。
您提到您在 PolicyId
上有一个元素范围索引。元素范围索引非常快,因为它们是内存索引。如果该索引不在内存中,则需要在使用之前将整个索引加载到内存中。您的第一个查询可能会触发索引的加载(这需要时间),而后续请求则受益于已经加载的索引。在一段时间不使用索引后,它可能会被换出以支持其他内存使用者。
Is there a way we can improve the performance for the very first call itself?
根据您的描述,我认为您正在做这样的事情:
fn.head(cts.search(cts.jsonPropertyRangeQuery("PolicyId", "=", policyId)))
对于这种查询,您不一定需要范围索引——您处理的不是不等式查询或类型敏感查询。我会改为使用通用索引进行性能测试。
fn.head(cts.search(cts.jsonPropertyValueQuery("PolicyId", policyId)))
我希望结果会在您的 2 秒到 30 毫秒之间返回,但变化可能较小。
MarkLogic 版本 9.0-6.2
我有一个自定义的 rest GET 服务,它接受一个 ID(比方说 PolicyId)和 returns 一个文档(总是只返回 1 个文档)。元素范围索引是在 PolicyId 上创建的。我有 100 个不同的文档,每个 PolicyId 一个。
当我第一次使用 PolicyId 通过 SoapUI 工具调用服务时,我看到响应时间大约为 2 秒,但是从第二次调用开始(即使我尝试使用不同的 PolicyId),我看到响应时间约为 30 毫秒。
现在,如果我关闭 SoapUI 工具并在 1 小时后重试上述步骤,我再次看到第一次调用的响应时间为 2 秒。
我正在尝试了解 MarkLogic 中的行为及其与缓存的关系。为什么我第一次反应慢?即使我提供不同的 PolicyId,我如何从第二次开始获得更快的响应?有没有办法可以提高第一次调用本身的性能?关于更好的 REST API 性能工具有什么建议吗?
非常感谢任何意见。
您提到您在 PolicyId
上有一个元素范围索引。元素范围索引非常快,因为它们是内存索引。如果该索引不在内存中,则需要在使用之前将整个索引加载到内存中。您的第一个查询可能会触发索引的加载(这需要时间),而后续请求则受益于已经加载的索引。在一段时间不使用索引后,它可能会被换出以支持其他内存使用者。
Is there a way we can improve the performance for the very first call itself?
根据您的描述,我认为您正在做这样的事情:
fn.head(cts.search(cts.jsonPropertyRangeQuery("PolicyId", "=", policyId)))
对于这种查询,您不一定需要范围索引——您处理的不是不等式查询或类型敏感查询。我会改为使用通用索引进行性能测试。
fn.head(cts.search(cts.jsonPropertyValueQuery("PolicyId", policyId)))
我希望结果会在您的 2 秒到 30 毫秒之间返回,但变化可能较小。