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

将其用作队列的数据库优化

  •  0
  • anony  · 技术社区  · 14 年前

    我们有一个名为worktable的表,它有一些列( key (主键), ptime , aname , status , content )

    我们有一个称为producer的东西,它在这个表中放入行,而consumer在 钥匙 列并获取状态为“挂起”的第一行。消费者对此行执行一些处理:

    1. 将状态更新为“正在处理”
    2. 使用内容进行一些处理
    3. 删除行

    当我们尝试运行多个使用者时,我们面临争用问题(可能是由于执行完整表扫描的顺序)。

    使用高级队列将是我们的下一步,但在我们开始之前,我们要检查在表上有多个消费者和生产者的情况下,我们可以达到的最大吞吐量是多少。

    我们可以做哪些优化来获得尽可能好的数据? 我们能做一个内存处理吗?在这个过程中,使用者一次获取1000行数据,然后进行处理和删除?这会改善吗?还有其他的可能性吗?表的分区?并行化?索引组织的表?…

    1 回复  |  直到 14 年前
        1
  •  1
  •   Joachim Sauer    14 年前

    可能的优化在很大程度上取决于所使用的数据库,但一个相当普遍的方法是创建一个索引,该索引覆盖选择正确行所需的所有字段(听起来像是键和 status 在这种情况下)。如果索引创建正确(一些数据库需要正确的键元素顺序,而其他数据库则不需要),那么查询应该快得多。