代码之家  ›  专栏  ›  技术社区  ›  Zombies

鲁比:使用光纤会增加我的数据库插入吞吐量吗?

  •  0
  • Zombies  · 技术社区  · 15 年前

    目前我使用的是Ruby1.9.1和“ruby mysql”gem,与“mysql”gem不同的是,它只用ruby编写。这实际上相当慢,因为它似乎以每秒接近1的速度插入(sloooooowwww)。我还有很多要做的插入,这几乎就是这个脚本所能做的。我只使用一个连接(因为我只使用一个线程)。我希望通过制造一种纤维来加快速度

    1. 创建新的数据库连接
    2. 插入1-3条记录
    3. 关闭数据库连接

    我可以想象,启动其中的20-50将极大地提高DB吞吐量。沿着这条路走对吗?我觉得这是最好的选择,而不是重构我的所有数据库代码,因为默认mysql驱动程序的语法有点不同:(

    2 回复  |  直到 15 年前
        1
  •  0
  •   cletus    15 年前

    为什么要在插入几次后关闭连接?您的脚本应该是:

    1. 打开连接
    2. 写下你需要的记录
    3. 闭合连接

    事务可能会使这变得复杂。

    如果要执行非事务性插入,则绝对要使用一个连接,并一次写入一个记录。

    如果您正在使用事务并编写一个真正巨大的数据集(即数百万行),那么可能需要调整您的数据库,以便它有足够的临时存储来处理这一问题。

    基本上,如果一个插入占用一秒钟,它会向我建议以下一个或多个:

    1. 您的外键没有索引,因此对插入的引用完整性检查效率极低;或者
    2. 连接打开和关闭过度。

    现在所说的是,让多个“工作人员”进行插入可能会导致总吞吐量的有效增加,但在每次插入1秒钟时,这不是您的问题。你需要找出你的问题所在。

    对于真正巨大的批量插入,也可能值得禁用检查约束、外键和索引,执行所有插入,然后重新启用它们。

        2
  •  0
  •   Zombies    15 年前

    因为您使用的是ruby1.9.1,所以只需使用线程。它们不再是绿色的了。对于多个并发数据库连接来说,光纤重量太轻,无法发挥作用。

    推荐文章