Saat ini saya sedang mengerjakan aplikasi seluler / desktop / terdistribusi dengan persyaratan dan masalah yang persis sama.
Pertama-tama, persyaratan ini tidak melekat pada aplikasi seluler per se, tetapi untuk setiap transaksi server-klien yang terputus / terdistribusi (pemrograman paralel, multithreading, Anda mendapatkan intinya). Karena itu, mereka tentu saja merupakan masalah khas yang harus diatasi dalam aplikasi seluler.
Secara umum, semua ini intinya adalah bahwa Anda memiliki catatan data potensial yang didistribusikan kepada n klien, yang dapat mengeditnya pada saat yang sama. Yang Anda butuhkan adalah
- mekanisme kontrol / penguncian versi yang tepat,
- manajemen hak / akses yang tepat,
- strategi sinkronisasi / cache yang tepat
Untuk (1) Anda dapat menerapkan beberapa pola: Ada dua strategi penguncian yang sering digunakan: Penguncian Offline Optimis , dan Penguncian Offline Pesimistis . Beberapa di antaranya diterapkan dalam "pola" kontrol versi yang berbeda, seperti MultiVersion Concurrency Control (MVCC), yang menggunakan penghitung (semacam "stempel waktu" yang sangat sederhana) untuk setiap catatan data, yang diperbarui setiap kali catatan diubah .
(2) dan (3) adalah masalah yang sangat luas sendiri, yang perlu ditangani secara independen dari (1). Beberapa saran dari pengalaman saya:
Gunakan teknologi client-server yang mengabstraksi sebagian besar masalah untuk Anda. Saya sangat merekomendasikan beberapa teknologi web seperti CouchDb , yang menangani (1) melalui Penguncian Offline + MVCC yang Optimistis, (2) melalui Web API, dan (3) melalui caching Http dengan sangat baik.
Cobalah untuk tidak menciptakan sesuatu sendiri jika Anda dapat mengandalkan teknologi dan pendekatan yang terbukti. Saya percaya setiap jam yang dihabiskan untuk meneliti dan membandingkan teknologi / pola yang ada jauh lebih baik daripada mencoba menerapkan sistem Anda sendiri.
Coba gunakan teknologi homogen jika memungkinkan. Maksudnya "homogen" yang saya maksudkan adalah teknologi yang dibangun dengan prinsip yang sama, misalnya skenario penggunaan web 2.0. Contoh: Menggunakan CouchDb dan REST Client (Web API) yang tepat dengan strategi caching lokal adalah pilihan yang lebih baik daripada menggunakan SQL untuk aplikasi seluler.
Saya sangat menyarankan untuk tidak menggunakan MySQL karena ini adalah teknologi yang tidak secara eksplisit dibuat untuk skenario penggunaan seperti itu. Ini bekerja, tetapi Anda jauh lebih baik dengan sistem database yang sudah mencakup gaya komunikasi web dan concurrency (seperti banyak Database NoSQL).
Ngomong-ngomong, saya telah puas dengan CouchDb dengan klien lokal khusus yang bekerja melawan API CouchDb, yang bekerja dan berkembang dengan sangat baik. Saya beralih dari menggunakan MSQL + (N) Hibernate dan membayar mahal karena tidak membuat pilihan yang tepat (artinya tidak melakukan penelitian yang cukup) sejak awal.