Как я могу заставить Rails синхронизировать транзакции с таблицей MySQL через соединения? - PullRequest
0 голосов
/ 28 августа 2010

У меня есть сайт с большим трафиком, который записывает веб-хиты в таблицу, Хиты.Имеется логика, позволяющая отбрасывать дублированные попадания (где определение того, что определяет совпадение как дублирующее, является произвольным для целей данного примера).

Проблема: при работе нескольких веб-серверов (для одной и той же БД)два или более хитов могут одновременно поступать на разные веб-серверы, и, с точки зрения каждого сервера, ни один из них не является дубликатом (тогда как при сериализации через один сервер все, кроме первого, должны быть отброшены).Следовательно, все они записываются в таблицу Hits.

Без изменения схемы БД для обеспечения уникальности поля в таблице Hits, как заставить Rails синхронизировать транзакцию с базой данных, чтобы гарантировать, что нетдубликаты написаны?Согласно документации, транзакции ActiveRecord применяются только для каждого соединения, что недостаточно (насколько я могу судить).

1 Ответ

0 голосов
/ 28 августа 2010

Транзакции в MySQL всегда выполняются для каждого соединения, другого способа определить, что такое атомарная операция, нет.

Я думаю, что единственный способ сделать это - установить блокировку на всю таблицу или обеспечить целостность на уровне схемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...