Зараз я працюю над мобільним / настільним / розповсюдженим додатком з точно такими ж вимогами та проблемами.
Перш за все, ці вимоги не властиві мобільним програмам самі по собі, а будь-яким відключеним / розподіленим транзакціям клієнт-сервер (паралельне програмування, багатопотоковість, ви розумієте). Як такі, вони, звичайно, є типовими проблемами для вирішення в мобільних додатках.
Як правило, все це зводиться до того, що у вас є потенційний запис даних, який поширюється на n клієнтів, які можуть редагувати його одночасно. Те, що вам потрібно, це
- належний механізм контролю / блокування версій,
- належне управління правами / доступом,
- належна стратегія синхронізації / кешування
Для (1) ви можете застосувати деякі шаблони: Існує дві часто використовувані стратегії блокування: Оптимістичне офлайн-блокування та Песимістичне офлайн-блокування . Деякі з них застосовуються в різних "моделях" управління версіями, наприклад, MultiVersion Concurrency Control (MVCC), який використовує лічильник (такий собі дуже простий "штамп часу") для кожного запису даних, який оновлюється щоразу, коли запис змінюється. .
(2) та (3) самі по собі є дуже широкими питаннями, які необхідно вирішити незалежно від (1). Деякі поради з мого досвіду:
Використовуйте технологію клієнт-сервер, яка дозволяє усунути більшість питань для вас. Я настійно рекомендую деякі веб-технології, такі як CouchDb , яка дуже добре обробляє (1) за допомогою оптимістичного офлайн-блокування + MVCC, (2) через веб-API та (3) через Http кешування дуже добре.
Постарайтеся не вигадувати речі самостійно, якщо можете покластися на перевірені технології та підходи. Я вважаю, що будь-яка година, витрачена на дослідження та порівняння існуючих технологій / моделей, значно краще витрачена, ніж на намагання впровадити власну систему.
Постарайтеся використовувати однорідні технології, якщо це можливо. Під "однорідними" я маю на увазі технології, побудовані з тими ж принципами, наприклад, сценарії використання веб-2.0. Приклад: Використання належного клієнта CouchDb та REST (веб-API) з локальною стратегією кешування - кращий вибір, ніж використання SQL для мобільних додатків.
Я настійно не рекомендую використовувати MySQL, оскільки це технологія, яка не була чітко створена для таких сценаріїв використання. Це працює, але вам набагато краще з системою баз даних, яка вже охоплює стиль веб-комунікації та одночасності (наприклад, багато баз даних NoSQL).
До речі, я влаштувався на CouchDb з користувацьким місцевим клієнтом, що працює проти API CouchDb, який працює і масштабує чудово. Я перейшов із використання MSQL + (N) в режим глибокого сну і заплатив високу ціну за те, що не зробив правильного вибору (мається на увазі недостатнього дослідження).