首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongodb查询优化-并行运行查询

Mongodb查询优化-并行运行查询
EN

Stack Overflow用户
提问于 2013-08-19 17:59:38
回答 1查看 1.6K关注 0票数 0

我正在尝试从java驱动程序中运行一些基于mongo集群的通配符/regex查询。Mongo副本集配置:3个成员副本16 CPU(超线程),24gRAM Linux x86_64集合大小: 6M行,7G数据

客户端是本地主机(mac 10.8),具有最新的mongo-java驱动程序。

用readpref = primaryPreffered使用java驱动程序进行查询

代码语言:javascript
复制
 { "$and" : [{ "$or" : [ { "country" : "united states"}]} , { "$or" : [ { "registering_organization" : { "$regex" : "^.*itt.*hartford.*$"}} , { "registering_organization" : { "$regex" : "^.*met.*life.*$"}} , { "registering_organization" : { "$regex" : "^.*cardinal.*health.*$"}}]}]}

我有关于“国家”和"registering_organization“的定期索引。但是,作为mongo文档,单个查询只能使用一个索引,我也可以从上述查询的explain()中看到这一点。

因此,我的问题是,在上述查询中实现更好性能的最佳替代方案是什么。我是否应该中断“和”操作,并在内存交集中执行。进一步说,我也会有“否”操作的疑问。

我认为我的应用程序在未来可能会变成报告/分析,但这并不是完全正确的,或者我不打算相应地进行设计。

EN

回答 1

Stack Overflow用户

发布于 2013-08-19 19:38:23

这个查询有很多错误。

在MongoDB中,使用正则表达式嵌套的条件永远不会变得更快。MongoDB并不是“数据发现”的最佳工具(例如,针对未知信息的临时、多条件查询)。当您知道您正在生成的度量标准时,MongoDB正在快速发展。但是,不是为了数据发现。

如果这是您正在运行的常见查询,那么我将创建一个名为"united_states_or_health_care“的属性,并将值设置为create的时间戳。使用此方法,您将逻辑从查询转移到文档架构。这是考虑使用MongoDB进行扩展的一种常见方法。

如果您正在进行数据发现,您有几个不同的选项:

  • 让您的应用程序连接不同查询的结果
  • 在辅助MongoDB上运行查询,并接受较慢的性能
  • 使用mosql将数据输送到Postgresql。Postgres将更快地运行这些数据发现查询。

另一个提示:

你的雷克斯不是以一种快速的方式锚定的。最好通过"registering_organization“过滤器运行"findable_registering_organization”属性。过滤器会将组织分解成一个可查询的名称子集数组,您将非常使用regexes。+2点,如果您可以通过行业查找过滤传入的名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18320138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档