【问题标题】:How can I force Rails to synchronize transactions to a MySQL table across connections?如何强制 Rails 跨连接将事务同步到 MySQL 表?
【发布时间】:2010-08-27 20:36:33
【问题描述】:

我有一个高流量网站,它在表格中记录网络点击量,Hits。有适当的逻辑可以丢弃重复的命中(在此示例中,将命中定义为重复的定义是任意的)。

问题:在运行多个 Web 服务器(针对同一个数据库)的情况下,两个或多个命中可以同时到达不同的 Web 服务器,并且从每个服务器的角度来看,它们都不是重复的(而它们是通过一个除了第一个服务器之外的所有服务器都应该被丢弃)。因此,它们都被写入 Hits 表。

在不更改数据库模式以强制 Hits 表中的字段具有唯一性的情况下,我如何强制 Rails 将事务同步到数据库以保证不写入重复项?根据文档,ActiveRecord 事务仅在每个连接的基础上执行,这还不够好(据我所知)。

【问题讨论】:

    标签: mysql ruby-on-rails ruby transactions synchronize


    【解决方案1】:

    MySQL 中的事务始终是每个连接的,没有其他方法可以判断什么是原子操作。

    我认为做到这一点的唯一方法是在整个表上加锁或在架构级别强制执行完整性。

    【讨论】:

    • 我最终选择了模式路线,通过修改事物以允许唯一的字段/索引。谢谢。
    猜你喜欢
    • 2014-12-10
    • 2023-04-07
    • 2013-11-17
    • 2020-11-30
    • 2017-06-08
    • 2023-03-04
    • 2011-05-06
    • 2018-06-01
    • 2011-05-22
    相关资源
    最近更新 更多