我正在尝试从java驱动程序中运行一些基于mongo集群的通配符/regex查询。Mongo副本集配置:3个成员副本16 CPU(超线程),24gRAM Linux x86_64集合大小: 6M行,7G数据
客户端是本地主机(mac 10.8),具有最新的mongo-java驱动程序。
用readpref = primaryPreffered使用java驱动程序进行查询
{ "$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()中看到这一点。
因此,我的问题是,在上述查询中实现更好性能的最佳替代方案是什么。我是否应该中断“和”操作,并在内存交集中执行。进一步说,我也会有“否”操作的疑问。
我认为我的应用程序在未来可能会变成报告/分析,但这并不是完全正确的,或者我不打算相应地进行设计。
发布于 2013-08-19 19:38:23
这个查询有很多错误。
在MongoDB中,使用正则表达式嵌套的条件永远不会变得更快。MongoDB并不是“数据发现”的最佳工具(例如,针对未知信息的临时、多条件查询)。当您知道您正在生成的度量标准时,MongoDB正在快速发展。但是,不是为了数据发现。
如果这是您正在运行的常见查询,那么我将创建一个名为"united_states_or_health_care“的属性,并将值设置为create的时间戳。使用此方法,您将逻辑从查询转移到文档架构。这是考虑使用MongoDB进行扩展的一种常见方法。
如果您正在进行数据发现,您有几个不同的选项:
mosql将数据输送到Postgresql。Postgres将更快地运行这些数据发现查询。另一个提示:
你的雷克斯不是以一种快速的方式锚定的。最好通过"registering_organization“过滤器运行"findable_registering_organization”属性。过滤器会将组织分解成一个可查询的名称子集数组,您将非常使用regexes。+2点,如果您可以通过行业查找过滤传入的名称。
https://stackoverflow.com/questions/18320138
复制相似问题