Use Case Requirement of my Mobile App:
Let us consider the following use case of my mobile app to design a good realtime data model.
Use case: Reconcile chat messages in multiple devices. I need to show up history data generated by one device in another device in real time when user login in two
different devices using same account details.
To implement this we need a central storage server and a synchronization
service.
Solution:
Google Drive can be used as a file storage server and also I need to look
for a javascript library or we should implement Operational Transformations
(OT) that would allow us to synchronize history data in realtime between
multiple devices. And Operational Transformations seems to fit my need for
realtime sync. Google Drive Realtime API provides synchronization service for
files in Google Drive via the use of Operational Transforms. This API is a
JavaScript library hosted by google that provides collaborative objects,
events, and methods for creating collaborative applciations.
The user has to authorize App access to his Google Drive. The following
details explains how i did realtime data synchronization for my phonegap
application and similarly you can do for any applicaitions (Web applications,
Mobile applications and PhoneGap applications).
As I explained Google Drive Realtime API takes care of everything. Only
thing that you have to do is to design a good Shared/Realtime/Collaborative
data model and focus on how you can build your app. I have designed the below
shared data model for my app.
Designing a Good Realtime Data Model:
The following is the proposed data model for my mobile application to
implement realtime sync with Google Drive.
The Realtime/Shared/Collaborative Map entry contains a key and value pair.
The Map's key must be a String. My mobile app/ chat application uses Cloud
reference id as key which is generated using the combination of user's jabber
id and timestamp of the chat session. The values can contain realtime
collaborative objects. Here the value of the map would be collaborative list
that contains the messages for the particular chat session.
Changes to the collaborative map will automatically be synced with ther
server and other collaborators. To listen for changes we need to add
EventListeners for the gapi.drive.realtime.EventType.VALUE_CHANGED event type.
Changes to the list will automatically be synced with the server and other
collaborators. To listen for changes, add EventListeners for the following
event types:
gapi.drive.realtime.EventType.VALUES_ADDED
gapi.drive.realtime.EventType.VALUES_REMOVED
gapi.drive.realtime.EventType.VALUES_SET
First entry in the collaborative list should always contain meta data about
my app chat history session which includes cloud reference id, reciever jabber
id, isActive flag , initiator device id etc. The remaining entries in the list
are actual IM chat messges.
Web SQL Realtime Sync With Google Drive:
The above Realtime/Shared data model is designed based on the local
database (WebSQL Storage)/ Data Models of my mobile application. The data model
for chat history of my mobile application has the following two
entities/tables:
- History table (For storing Chat Sessions)
- IM table (For storing Messages)
Each chat session contains collection of messages chat by users. The
session can be two party chat session or multiparty chat session. Whenever a
collaborative data model is modified. The API then silently sends a
representation of the change to the server (called a "mutation") so
that the change can be recorded in the realtime file and communicated to other
collaborators.
So we have discussed in detail how to design collaborative/realtime data
model by understanding your local storage/ local data models. And also
discussed how to do realtime data synchronization between two or more
collaborators.
Comments
Post a Comment