问题。我需要阅读来自Mongodb的文档,500M文档,它被分片为10个分片。
我现在最大的问题是速度。
我已经分别连接到每个分片并将每个分片作为单独的任务读取,假设我的速度将增加10倍。
它有点快,但仍然不够快。
有什么建议可以提高速度吗?
注意:我正在从光标阅读文档。 尝试没有更低的内存占用。 现在,需要
在1个碎片上超过100K文件26秒 4.5分钟翻阅1M文档,10个分片
所以从这里看,它需要37.5小时才能超过500M。
任何人都处理过速度优化问题?
答案 0 :(得分:0)
以下是一些使用某些假设来提高速度的提示
MongoDB是一个nosql数据库,它使用仲裁来保证一致性和可靠性。在您的情况下,虽然您是分别从分片读取,但MongoDB默认使用3的仲裁。 (这意味着将从3个副本进行读取,然后提供最新/一致的结果)。在这里,我假设你的环境被复制了3倍 使仲裁值为1将更快地提供结果,但可能不一致/旧。
索引是所有数据库中常用的选项,用于读取记录(仅限必填字段),比正常读取速度快得多。
使用SSD代替旋转磁盘可以提供更好的吞吐量(虽然可能不适用于当前情况,但将来会有所帮助)
MongoDB 3.0版本使用WiredTiger引擎,声称比旧版本快得多(5x-7x)。
如果您有更多钱,可以考虑的另一个选择是在系统中添加更多分片并将其水平缩放
在跳转优化读取延迟之前,为什么需要读取数据库中的所有500M记录? 从正常的实际oltp事务中读取数据库中的所有记录是没有意义的。