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

0

首先,让我介绍一下我的用例-我有一个collectionwith文档,用于存储XMLrequest和对应responseXML 此外,每个文档都有大量附带的属性,其中一些已被索引,但请求和响应却没有。

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

现在,我做这样的事情:

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

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

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

  1. 索引requests和responses-但我认为这不是一个好主意,因为它们确实很长,而且很有可能索引很大。
  2. indexed首先使用某个字段进行查询,然后应用已提到的查询,但是以找到的记录的降序排列,并选择第一个找到的记录,因此我想执行以下操作

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

总结一下-我的问题是:我应该选择索引requests和responses的简单解决方案吗?它将对我的索引大小产生什么影响?

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

0

最后,我尝试了第二种解决方案,但由于无法findOne在查询结果上运行,因此对其进行了少许更改但是我发现了等效的语法。

所以现在看起来像这样:

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

而且现在的性能要好得多。

我也曾经explain检查过真正的“速度”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Java在Elasticsearch中进行多重过滤查询?

来自分类Dev

使用Java Mao访问模式在Mongo中进行独特查询

来自分类Dev

在Scala中进行类型优化,但不使用优化

来自分类Dev

如何在MongoDB中进行搜索查询

来自分类Dev

如何在MongoDB中进行此类查询

来自分类Dev

使用查询生成器在mongodb中进行动态查询

来自分类Dev

使用Spring数据mongodb在MongoTempate中进行聚合查询的执行计划

来自分类Dev

使用F()在Django中进行模量查询

来自分类Dev

使用多个索引在Gremlin中进行查询

来自分类Dev

使用linq查询从列表中进行过滤

来自分类Dev

使用线程进行Java优化

来自分类Dev

使用LIKE语句进行查询优化

来自分类Dev

使用嵌套选择进行查询优化

来自分类Dev

使用子查询进行查询并进行联接优化

来自分类Dev

使用mongodb在Rails中进行批量更新

来自分类Dev

如何在nodejs / MongoDB中进行OR操作查询?

来自分类Dev

MongoDB查询优化

来自分类Dev

如何优化mongoDB查询?

来自分类Dev

MongoDB查询优化

来自分类Dev

如何优化Mongodb的查询

来自分类Dev

MongoDB查询优化

来自分类Dev

MongoDB查询优化

来自分类Dev

MongoDB查找查询优化

来自分类Dev

结合查询进行查询优化

来自分类Dev

使用Java在XPages中进行验证

来自分类Dev

使用Singleton模式在Java中进行缓存

来自分类Dev

在SELECT中进行SELECT以在Java中查询mysql

来自分类Dev

使用MySQL直接在查询中进行值检查

来自分类Dev

使用自联接在LINQ中进行查询