gpt4 book ai didi

用于范围查询的 MongoDB 索引和 ShardKey?

转载 作者:可可西里 更新时间:2023-11-01 09:55:50 28 4
gpt4 key购买 nike

我将使用 MongoDB 2.4.x

这意味着我可以使用Hashed-based索引。

我可以将索引设置为shardKey,它会几乎均匀地分布在服务器之间,并且会被均匀地访问。

当我尝试执行范围查询时出现问题。

我的查询如下所示

 db.feeds.find({ age: { $gte: 20, $lte: 25}}).sort({timestamp: -1}).limit(10)

我想我有两个选择

  1. 在 { age: 1, timestamp: -1 } 上建立索引并设置 shardKey

  2. shardKey使用hashed-based索引,query使用上述索引>在内存(memcached 或 redis)中缓存最近的查询结果,因为范围查询会命中许多分片服务器。

哪一个是处理范围查询的更有效策略?或者关于这个问题的任何其他建议?

最佳答案

缓存是否有意义取决于范围查询的不同程度、它们返回的数据量以及缓存需要多久失效一次。

添加其他数据库技术(如 Redis 或 Memcached)会给您的项目增加额外的技术复杂性。这将需要更多的专业知识和工时来维护产品,并且会造成另一个故障点。因此,当有可能以适当的方式进行时,您应该尝试在 MongoDB 中进行缓存。

您可以将缓存实现为 MongoDB 中的另一个(上限?)集合,其中哈希分片键由用于结果的查询的范围分隔符组成。

此缓存集合中的文档将如下所示:

 { 
age_range: {
from: 20,
to: 25
},
results: [
...
]
}

你的索引是这样的:

ensureIndex( {
age_range:"hashed"
},
{
unique:1
}
);

请记住,当您的结果集非常大时,这可能会出现问题,因为 MongoDB 中的最大文档大小限制为 16MB。

关于用于范围查询的 MongoDB 索引和 ShardKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19080661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com