Tôi hiện đang làm việc trên một ứng dụng di động / máy tính để bàn / phân phối với chính xác các yêu cầu và vấn đề tương tự.
Trước hết, các yêu cầu này không phải là vốn có đối với các ứng dụng di động, nhưng đối với mọi giao dịch máy chủ-máy khách bị ngắt kết nối (lập trình song song, đa luồng, bạn sẽ nhận được điểm). Như vậy, tất nhiên, đây là những vấn đề điển hình cần giải quyết trong các ứng dụng di động.
Nói chung, tất cả điều này có nghĩa là bạn có một bản ghi dữ liệu tiềm năng được phân phối cho n khách hàng, những người có thể chỉnh sửa nó cùng một lúc. Những gì bạn cần là
- một cơ chế kiểm soát / khóa phiên bản thích hợp,
- một quyền thích hợp / quản lý truy cập,
- một chiến lược đồng bộ hóa / bộ nhớ đệm thích hợp
Đối với (1) bạn có thể áp dụng một số mẫu: Có hai chiến lược khóa được sử dụng thường xuyên: Khóa ngoại tuyến lạc quan và Khóa ngoại tuyến bi quan . Một số trong số này được áp dụng trong các "mẫu" điều khiển phiên bản khác nhau, chẳng hạn như MultiVersion Concurrency Control (MVCC), sử dụng bộ đếm (loại "dấu thời gian" rất đơn giản) cho mỗi bản ghi dữ liệu, được cập nhật mỗi khi thay đổi bản ghi .
(2) và (3) là những vấn đề rất rộng, cần được xử lý độc lập với (1). Một số lời khuyên từ kinh nghiệm của tôi:
Sử dụng công nghệ máy khách-máy chủ trừu tượng hóa hầu hết các vấn đề cho bạn. Tôi đặc biệt khuyên dùng một số công nghệ web như CouchDb , xử lý (1) thông qua Khóa ngoại tuyến lạc quan + MVCC, (2) qua API Web và (3) qua bộ nhớ đệm http rất tốt.
Cố gắng không tự phát minh ra mọi thứ nếu bạn có thể dựa vào các công nghệ và phương pháp đã được chứng minh. Tôi tin rằng bất kỳ giờ nào dành cho việc nghiên cứu và so sánh các công nghệ / mẫu hiện có sẽ tốt hơn nhiều so với việc cố gắng thực hiện (các) hệ thống của riêng bạn.
Cố gắng sử dụng các công nghệ đồng nhất nếu có thể. Theo "đồng nhất", ý tôi là các công nghệ đã được xây dựng với cùng các nguyên tắc, ví dụ như các kịch bản sử dụng web 2.0. Một ví dụ: Sử dụng CouchDb và REST Client (API Web) thích hợp với chiến lược lưu trữ cục bộ là lựa chọn tốt hơn so với sử dụng SQL cho các ứng dụng di động.
Tôi thực sự khuyên bạn không nên sử dụng MySQL vì đây là công nghệ không được thực hiện rõ ràng cho các tình huống sử dụng như vậy. Nó hoạt động, nhưng bạn tốt hơn nhiều với một hệ thống cơ sở dữ liệu đã bao trùm phong cách giao tiếp và giao tiếp web (chẳng hạn như nhiều Cơ sở dữ liệu NoQuery).
Nhân tiện, tôi đã giải quyết cho CouchDb với một máy khách cục bộ tùy chỉnh hoạt động dựa trên API CouchDb, hoạt động và chia tỷ lệ đẹp. Tôi đã chuyển từ sử dụng MSQL + (N) Hibernate và trả giá cao vì không đưa ra lựa chọn đúng (nghĩa là không thực hiện đủ nghiên cứu) ngay từ đầu.