Я разрабатываю приложение Adobe AIR, которое хранит данные локально с помощью базы данных SQLite. Я хочу, чтобы конечный пользователь в любое время синхронизировал свои локальные данные с центральной базой данных MySQL.
Какие-нибудь советы, советы по тому, как это правильно? Производительность и стабильность - это ключ (помимо безопасности;))


Я могу придумать несколько способов:
Периодически делайте дамп вашей базы данных MySQL и создавайте новую базу данных SQLite из дампа. Затем вы можете обслуживать базу данных SQLite (базы данных SQLite содержатся в одном файле), чтобы ваш пользовательский клиент мог загрузить и заменить текущую базу данных.
Создайте сценарий сравнения, который генерирует необходимые операторы для ускорения работы текущей базы данных (различные операторы INSERT, UPDATE и DELETE). Для этого вы должны непрерывно записывать время каждого изменения в своей базе данных (время создания и обновления для каждой строки, а также вести историю удаленных строк). Клиент пользователя загрузит файл diff (текстовый файл с различными операторами) и применит его к локальной базе данных.
У обоих подходов есть свои плюсы и минусы - выгрузив всю базу данных, вы убедитесь, что все данные проходят. Это также намного проще, чем создание diff, однако это может увеличить нагрузку на сервер, в зависимости от того, как часто база данных обновляется между дампами.
С другой стороны, различие между базами данных даст вам только те данные, которые изменились (надеюсь), но они более подвержены логическим ошибкам. Это также вызовет дополнительные накладные расходы на клиенте, поскольку ему придется создавать / обновлять все необходимые записи, а не просто копировать файл.
Если вы просто синхронизируете сервер с клиентом, решение Эрана должно работать.
Если вы просто синхронизируете от клиента к серверу, просто поменяйте местами.
Если вы синхронизируете оба пути, получайте удовольствие. Как минимум, вы, вероятно, захотите вести журналы изменений, и вам нужно будет выяснить, как справляться с конфликтами.
Я полагаю, вы имеете в виду синхронизировать данные "в обе стороны"?