给定一个名为probe
的集合,该集合每周增长1100万条记录,包含漏洞利用探测的记录,其中包括date
属性和source.ip
属性,即:
{
_id: ObjectId('64943e2001000100160b843e'),
date: '2023-06-22T12:27:12Z',
source: {
ip: '217.17.230.18',
port: 56882
},
target: {
ip: '88.198.64.58',
port: 22
}
}
哪种类型的索引将提高选择distinct source.ip的查询的性能,其中日期大于可变日期?ie(node.js):
export const recent = async (since) => (
await client.db('cichlid').collection('probe').distinct(
'source.ip',
{
date: {
$gte: since.toISOString().replace('.000Z', 'Z')
}
}
)
);
查询从API网关后面的AWSlambda运行,这将其限制为30秒超时。当前在集合上没有索引(除了自动创建的索引),并且随着集合大小的增长,它已经开始超时。
- 我需要一个复合索引为这两个领域(
date
,source.ip
)? - 我应该在
date
上创建一个简单的索引吗? - 我应该在
source.ip
上创建一个简单的索引吗?
compass给了我一个索引类型的选择(asc,desc,2dsphere,text)。由于日期过滤器通常是 *now()减去1小时 *,因此我假设desc适合该字段,text可能适合IP地址。但我只是猜测。
1条答案
按热度按时间f87krz0w1#
我创建了3个索引:
compass显示仅使用简单日期(desc)索引。distinct source.ip查询从花费44秒完成变为500毫秒。我想这回答了问题。
在该特定情况下,索引需要在过滤器约束字段上,并且这将性能提高了88倍。