【问题标题】:Connecting to shards separately to read only, speed performance单独连接到分片以只读方式,提高性能
【发布时间】:2017-02-26 13:35:15
【问题描述】:

问题。我需要从 Mongodb 读取文档,500M 文档,分片到 10 个分片。

我现在最大的问题是速度。

假设我的速度将提高 10 倍,我已分别连接到每个分片并将每个分片作为单独的任务读取。

它有点快,但仍然不够快。

有什么提高速度的建议吗?

注意:我正在从光标处逐个文档读取。 尽量不要降低内存占用。 现在需要

26 秒可在 1 个分片上处理超过 100K 的文档 10 个分片上超过 100 万个文档需要 4.5 分钟

所以从这里开始,看起来需要 37.5 小时才能超过 500M。

有人处理过速度优化问题吗?

【问题讨论】:

    标签: mongodb performance pymongo


    【解决方案1】:

    这里有一些技巧可以通过一些假设来提高速度

    1. MongoDB 是一个 nosql 数据库,它使用仲裁来实现一致性和可靠性。在您的情况下,虽然您分别从分片读取,但 MongoDB 默认使用 3 的仲裁。 (这意味着读取将从 3 个副本发生,然后提供最新/一致的结果)。在这里,我假设您的环境被复制了 3 倍 将仲裁值设为 1 会更快地提供结果,但可能会不一致/过时。

    2. 索引是所有数据库中常用的选项,用于读取记录(并且仅是必填字段)比普通读取快得多。

    3. 使用 SSD 而不是旋转磁盘将为您提供更好的吞吐量(虽然在当前情况下可能不适用,但将来应该会有所帮助)

    4. MongoDB 3.0 版本使用 WiredTiger 引擎,声称比旧版本快得多 (5x-7x)。

    如果您有更多资金,您可以考虑的另一个选择是在系统中添加更多分片并水平扩展

    在跳转优化读取延迟之前,为什么需要读取数据库中的所有 500M 记录? 从数据库中读取所有记录在现实生活中的普通 oltp 事务中毫无意义。

    【讨论】:

    • 谢谢! 3. 我有一个测试环境,开发者在 AWS 上。 4. 蒙哥 3.2.9。我正在阅读数据以对其进行分析工作,但它在速度方面表现不佳。我一直在寻找优化它的方法。不管怎么说,还是要谢谢你。我需要使用 pymongo 找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多