什么是短暂的数据库错误在高并发的Rails系统处理“最佳实践”?(What are 'bes

2019-09-30 09:06发布

虽然研究死锁问题,我发现了以下职位:

https://rails.lighthouseapp.com/projects/8994/tickets/6596

它的要点如下:

  1. MySQL的文档说:

    死锁是事务型数据库的一个经典问题,但他们没有危险,除非它们是如此频繁,你不能运行某些交易可言。 通常情况下, 你必须编写你的应用程序,使他们时刻准备着重新发行,如果它被推出,因为死锁的回退的事务

  2. 因此调试瞬时死锁是一个反因为MySQL说,他们是正常和不可避免的。

  3. 因此,Rails的应该提供大家一个办法,因为它:

    使得假设有“最好”的方式做的事情,它的设计,以鼓励方式

  4. 但Rails不为我们提供了一种方式,以便我们使用的是哈克DIY的东西。

所以,如果这一切是真的,哪里是Rails的解决方案?


注:此项目是无效的,但似乎很简单,是一个解决办法。 为什么Rails的不是有这样的事情? https://github.com/qertoip/transaction_retry

Answer 1:

此修复程序,对我来说,是一个更好的指标。

有问题的更新是有连接的查询,和现有的指标并不足以为MySQL的加入,有效地搜索。

添加适当的索引即使在不合理的并发负载测试中完全移除僵局问题。



文章来源: What are 'best practices' for dealing with transient database errors in a highly concurrent Rails system?