Bhu*_*dha 3 ruby database database-design data-storage
当多个用户同时在数据库(MySQL、Postgres)中插入数据时会发生什么?它如何确定先插入哪条记录后插入哪条记录的优先级。如果答案特定于程序的应用程序,我是在参考网络应用程序。
一般来说,两件事永远不会完全同时发生。有一个工作队列,在某种程度上,一件事总是先于另一件事发生。
但是,在某些情况下,整个事务可能需要多个步骤——如果其中两种事务几乎同时开始,它们可能会在时间上重叠。这可能会导致问题。
例如,假设一个人在购物车中购买某物,步骤包括为他们创建订单记录以及递减和库存计数。如果两个人几乎同时开始这个过程,他们都有可能在库存减少以显示该项目缺货之前购买该项目。
在可能发生这种情况的情况下,postgres(和其他现代数据库)提供了限制程序以保护自己的方法。这些包括事务和锁定。
对于事务 (请参阅此处的 postgres 文档),语句组作为一个单元运行——如果后面的步骤之一失败,则所有步骤都将“回滚”。(例如,如果由于商品缺货而无法减少库存,则可以回滚订单创建。)
使用锁定 (请参阅此处的 postgres 文档),表(甚至表中的单个行)被锁定,以便任何其他想要访问它们的进程要么等待要么超时。这将防止两个进程几乎同时更新相同的数据。
一般来说,绝大多数应用程序不需要这两种方法中的任何一种。除非您在银行等环境中工作,其中所涉及的表包含金融交易,否则您可能不必担心。
| 归档时间: |
|
| 查看次数: |
4396 次 |
| 最近记录: |