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

0

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

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

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

Теги:
transactions

1 ответ

0
Лучший ответ

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

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

  • 0
    Я закончил тем, что пошел по маршруту схемы, переделав вещи, чтобы учесть уникальное поле / индекс. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню