gpt4 book ai didi

java - 使用 Java 在 MongoDB 中进行查询优化

转载 作者:行者123 更新时间:2023-11-30 07:46:04 25 4
gpt4 key购买 nike

首先让我介绍一下我的用例 - 我有一个包含文档的集合,我在其中存储 XML 请求和相应的响应 。此外,每个文档都有大量附带属性,其中一些属性已建立索引,但请求和响应则没有。

每当我使用索引字段进行搜索时,性能就足够了。但在某些情况下,我必须使用基于请求或响应值的正则表达式来准备搜索。

现在我做这样的事情:

db.traffic.find(
{ $or:
[ { request: { $regex: "some.* code=\"123\"} },
{ response: { $regex: "some.* code=\"123\"} }] })

我将其翻译成 Java 代码。但查询速度很慢,并且与其他查询相比需要花费大量时间。

我可以看到两种解决方案:

  1. 索引请求响应 - 但我认为这不是一个好主意,因为它们真的很长,而且很可能索引会很大。
  2. 首先使用一些索引字段进行查询,然后应用已经提到的查询,但按找到的记录的降序排列,并选择第一个找到的记录,所以我想做类似的事情

    db.traffic.find({"conversationID": { $regex: "vendorName" }}).sort({"counter": -1}) 
    .findOne(
    { $or:
    [ { request: { $regex: "some.* code=\"123\"} },
    { response: { $regex: "some.* code=\"123\"} }] })

总结 - 我的问题是:我应该选择索引请求响应的更简单的解决方案吗?它会对我的索引大小产生什么影响?

还是应该选择第二种方式?但我的代码正确吗?它是我想要的吗?

最佳答案

您是否尝试过对这两种方法进行解释?

使用mongo shell测试查询,并在查询前添加explain,所以:

db.traffic.explain()...

尝试两者,您应该获得一些指示方向的信息。

关于java - 使用 Java 在 MongoDB 中进行查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33947903/

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