基本上,我们有销售人员,他们要求销售线索打电话给我们。现在它尝试了一个“新线索”查询来获取这些信息。
如果没有任何新的线索,它会转到一个“相对较新”的查询。我们称之为“来源”,本质上是一个更密切的将通过来源,直到他们找到一个可行的线索。
这些查询都查询同一个表,只是不同的数据组。但是,每个查询都有很多复杂的排序,在这些查询和插入/更新到表(表是InnoDB)之间,我们经历了很多等待(没有死锁,因为它们不显示在InnoDB状态),所以我猜我们的选择很慢,加上很多插入/更新。
现在,最终的问题是:
我们是否应该为每个源查询数据库,并获取大约100ish(显然是变量,取决于系统)并将它们缓存在memcached中。然后,当closer请求引导时,从缓存发送它们,但更新缓存以反映“已接受”标志。这样,我们只在缓存的潜在客户用完时调用每个源,所以在用完时只调用一次,而不是每接近一次就请求一个潜在客户?
然后我们可以使用memcached的模拟锁-http://code.google.com/p/memcached/wiki/FAQ#Emulating_locking_with_the_add_command
这看起来是可行的解决方案吗有什么建议吗?我们需要尽可能地减少锁等待的机会。
最佳答案
听起来是可行的,但是你看过你的索引了吗?你在你的选择中使用了合适的隔离级别吗?
上一个SO问题可能有助于回答您的问题:Any way to select without causing locking in MySQL?
如果在具有完整事务的SP中执行选择/更新,由于优化的原因,这也会大大加快速度。当然,有时候MySQL中的SP会慢得多:(
我会把这个作为评论,但还没有达到那个水平:)
我确实读过关于inno db的部分,但是经验告诉我,即使在使用隔离级别时使用inno也有改进。
关于php - 这是对Memcached中列表的可行解决方案吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6851186/