Доброго времени суток.
Делаю плагин для пополнения игрового магазина как на сайте, так и на игровом сервере.
Игровой магазин каждую минуту через плагин начисляет 5 единиц валюты и держит сумму в sqlite.
На веб хостинге стоит же mysql, и в системе авторизации и пополнения виртуального счета (на сайте) предусмотрено поле под баланс в таблице.
Собственно в чем вопрос, если делать синхронизацию:
сайт -> игровой сервер (то будут затерт баланс в игре в случае пополнения сайта и разных сумм сайта и игры)
игровой сервер -> сайт (то будут затерт баланс на сайте в случае пополнения плагином баланса за время в игре)
Начисление валюты на сайте происходит так:
пополнение через платёжный шлюз -> текущий баланс игрока на сайте + сумма пополнения.
Так как плагин считает отдельно и исходников от него у меня нет, то собственно стоит вопрос:
как синхронизировать баланс между игровым сервером и сайтом в двухстороннем порядке и без потерь в балансе.
Если учесть что всегда будет разсинхрон балансов.
Теоритически надо при синхронизации пересчитывать баланс и сохранять в обоих хранилищах с меткой времени, вести транзакции в обоих хранилищах, при синхронизации уже считать и по кругу
Не важно откуда и куда вы будете делать синхронизацию, главное, что бы в момент обновления исходная таблица была заблокирована до момента вставки значения в целевую таблицу. А на время блокировки, запросы на обновление исходной таблицы должны попадать в очередь, после снятия блокировки они будут исполнены.
Поищите как блокировать таблицы в SQLite и MySQL, а затем реализуйте алгоритм синхронизации с блокировками.