0

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

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

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

4

1 回答 1

0

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

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

于 2010-08-27T23:42:15.150 回答