我有一个mongo集合包含了大约100万个文档。这个集合有一个索引(在其他索引中)。大约有70,000个product_type为“foo”的项目。当我执行查询时(见下文)在我的本地开发机器上,查询大约需要1秒。当我在AWS DocumentDb上执行完全相同的查询时(具有相同大小的集合和索引,以及类似的计算能力),查询可以花费从60秒到1500秒任何时间(取决于指定的product_type)。我正在通过python flask应用程序执行查询(运行在同一地理区域的EC2示例上)。查询还执行投影以仅返回文档ID和一个其他属性。似乎是全面的情况下,我的查询在DocumentDb上要慢得多。其他信息:服务器示例位于bastion服务器后面,flask应用程序运行在Apache服务器(安装在EC2示例上)上。所有内容都在VPC中运行。查询速度似乎普遍变慢(不仅仅是此查询)。能否就瓶颈的原因给予一些建议?
查询:
query = {
'properties.property1': {'$ne': None},
'properties.property2': {'$ne': None},
'properties.property3': {'$ne': None},
'properties.property4': {'$ne': None},
'properties.property5': {'$ne': None},
'product_ids': {'$ne': None},
'properties.property6': {'$ne': None},
'properties.property7': {'$ne': None},
'properties.property8': {'$ne': None},
'properties.property9': {'$ne': None},
'properties.property10': {'$ne': None},
'properties.property11': {'$ne': None},
'properties.property12': {'$ne': None},
'properties.property13': {'$ne': None},
'properties.property14': {'$ne': None},
'product_type': {'$regex': '^foo$', '$options': 'i'},
'date': {'$ne': None},
'status': 'ENABLED',
'properties': {'$ne': None},
'properties.property15': {'$ne': True}
}
我尝试过加快查询速度的事情(没有太大成功):删除regex并将product_type直接设置为'foo'使用'skip'和'limit'成批执行查询尝试使用不同的索引('product_type')是我目前找到的最佳索引。尝试不同的查询变体(从查询中删除不同的项)
1条答案
按热度按时间iezvtpos1#
Amazon DocumentDB有一些功能上的差异,其中之一是对于
$regex
,你必须显式地提示索引才能使用它。另外,我看到你使用的是$ne
,目前没有索引支持,你可能必须修改查询为相等过滤器,或者可能使用比较操作符代替。正如MongoDB文档中所述:不等式运算符$ne的选择性不是很强,因为它通常匹配索引的大部分。因此,在许多情况下,带有索引的$ne查询的性能可能并不比必须扫描集合中所有文档的$ne查询好。