数据库优化将其用作队列

时间:2010-06-09 12:49:07

标签: database queue

我们有一个名为worktable的表,其中包含一些列(key(主键),ptimeanamestatuscontent)。< / p>

我们有一个名为producer的东西,它在这个表中放入行,我们有消费者在key列上执行order-by并获取状态为“pending”的第一行。消费者对此行进行了一些处理:

  1. 将状态更新为“处理”
  2. 使用内容进行一些处理
  3. 删除行
  4. 当我们尝试运行多个消费者时,我们正面临争用问题(可能是由于全表扫描的顺序)。

    使用高级队列将是我们的下一步,但在我们去那里之前,我们想要检查我们可以通过桌面上的多个消费者和生产者实现的最大吞吐量。

    我们可以采取哪些优化来获得最佳数字? 我们可以进行内存中处理,消费者一次获取1000行进程并删除吗?会改善吗?还有什么其他可能性?分区表?并行?索引组织表?...

1 个答案:

答案 0 :(得分:1)

可能的优化很大程度上取决于所使用的数据库,但一种非常通用的方法是创建一个索引,该索引涵盖选择正确行所需的所有字段(听起来就像是密钥和{{1} } 在这种情况下)。如果索引是正确创建的(某些数据库需要关键元素的正确顺序,其他数据库则不需要),那么查询应该更快。