Помогите с быстрым и грязным решением для синхронизации БД - PullRequest
1 голос
/ 04 марта 2010

У меня проблема с крайним сроком. И этот срок наступает завтра: S К счастью, это не должно быть лучшим решением; даже не хороший. Мне нужна только одна часть работы, которую я опишу в ближайшее время. Я хочу, чтобы вы знали, что я ищу самое быстрое и самое грязное решение, поэтому моя идея может звучать очень плохо.

Итак, последние пару дней Я пытался синхронизировать базу данных, расположенную на устройстве Windows Mobile, с базой данных MySQL , расположенной на центральном сервере Linux. Пошаговое руководство Microsoft содержит веб-сервис, с которым я не уверен, как обращаться (у меня очень ограниченные знания в этой области). Насколько я понимаю, есть сервис, который должен быть расположен на стороне сервера, но это невозможно по разным причинам (включая тот факт, что это машина с Linux). Кроме того, мне еще предстоит выяснить, как сделать провайдер синхронизации mysql.

Мое решение, и это уродливо для вас, - создать на сервере веб-службу Java, которая отвечает за отслеживание запросов синхронизации каждого Windows Mobiles и отвечает соответствующим образом. Вот как я думаю, что это пойдет:

Каждое устройство Windows Mobile будет содержать локальную базу данных (SQL Compact). При активном подключении к Интернету он отправляет запрос в веб-службу для синхронизации отправки своей базы данных по имени пользователя и паролю. Веб-служба будет искать последний запрос синхронизации из этих учетных данных (который является дампом базы данных на момент запроса) и сравнивать его с текущим состоянием базы данных. Сервис будет отправлять изменения только в качестве ответа. Как только ответ отправлен, он сохранит текущее состояние базы данных как последний запрос пользователя на синхронизацию для следующего. Все, что требуется для устройства Windows Mobile, - это следовать ответу (простые операторы CRUD).

Итак, наконец, мой вопрос: Как я могу сохранить состояние базы данных, чтобы потом сравнить ее с будущим состоянием?

Конечно, само собой разумеется, что если есть лучшее решение, которое можно сделать быстро, я могу отказаться от всей этой идеи.

Для этого случая вот что вам нужно знать: сервер работает под управлением Linux. База данных на нем - MySQL, и я не могу изменить схему. Однако я могу установить программное обеспечение на сервер, например, веб-сервис. Наконец, на устройствах Windows Mobile в настоящее время работает SQL Compact. И, конечно, это ничего не должно стоить, так как оно не будет окончательным решением (которое будет использовать Microsoft Sync Framework, как только я выясню некоторые вещи).

Большое спасибо. Я также хотел бы, чтобы вы знали, что это не вопрос «дайте мне код», я в основном ищу любые отзывы (комментарии / идеи / предложения / ранг / и т. Д.).

Ответы [ 2 ]

1 голос
/ 04 марта 2010

Почему бы просто не создать ключ MD5 для всех данных в базе данных и не сохранить их? Это не позволит вам увидеть, какие изменения произошли, но по крайней мере вы будете знать, что изменение было внесено.

1 голос
/ 04 марта 2010

Вот случайный (и, возможно, глупый и неработоспособный) способ решения этой проблемы. Если я правильно понимаю, вы синхронизируете только в одном направлении (от базы данных MySQL до мобильного устройства). Если это двусторонняя синхронизация, то она вообще не будет работать.

Настройка репликации в базе данных для репликации в подчиненную копию данных. В этой ведомой базе данных поместите триггеры в соответствующие таблицы и для каждой модификации (удалите, обновите, вставьте) запишите необходимую информацию для генерации ваших операторов CRUD в некоторый файл / таблицу. Затем во время синхронизации просто воспроизведите эти операторы на устройстве, а затем удалите / очистите файл. Следующая синхронизация будет затем воспроизводить следующий набор операторов, которые были накоплены.

...