When developing applications for mobile devices (Windows Store or Windows Phone) we have to deal with connected data scenarios using cloud web services, and disconnected scenarios where data is stored locally. In this session we will explore all options to store information locally and remotely (files, Isolated Storage, IndexedDB, SQLite, NoSQL DBs and Azure Mobile Services), and how to build a system for synchronizing data when using a combination of these systems.
19. // Opening a Database
var
// Assume db is a database variable opened earlier
var
var
// Define a person
var
// Perform the add
var
22. // Opening a Database
var db = new PouchDB('dbname');
// Add an object
db.put({ _id: ’me@email.com', name: ’Alex', age: 66 });
// Subscripbe to changes
db.changes({
onChange: function() {
console.log('Ch-Ch-Changes');
}
});
// Replicate to external DB
db.replicate.to('http://example.com/mydb');
Hello everyone. Thank you for coming at the last session of MCT Summit.In this talk I want to show you how to deal with connected and disconnected scenarios using Windows Store apps and how to synchronize data between a local and an external database.
Againefore I start, I want to thanks Sponsors:Aplixure, Microsoft Learning, Virsoft. Withoutthem, this Summit wouldn’t be posible!
As I said, I thistalk I wanttotalkdisconnectedscenarios. And I wantto show youhowto store local data usingSQLite and IndexedDB. And thenhowtosynchronizewithexternal server. We’llseehowtosyncrhonizeSQLitewith Mobile Services, and theIndexedDBwithanexternalCouchDBdatabase.
I’m Alex Casquete I’m working in Spain as a developer and trainer in a consultant company specialized in Microsoft Technologies. The last two years I have been involved in developing mobility solutions using windows store apps and Windows azure, in particular I’m developing business store apps. Apps related with an specific business of a company. I think is in this kind of application where dealing with connected and disconnected and with how to synchronize data became important. Here you have my email address and my twitter if you want to ask me after this talk or stay in contact.
Thisisthecommonmessagethatweseewhenanaplicattionisnotsupporting offline navigation. That means that we cant use the application if we are not connected.In manybusiness store apps, thisisnotanoption, weneedtheapplicationsalwaysrunning.
Ok, let’sgowiththefirsttopic. The key thing is that Mobiles phone and tablets are not always connected and so experience latencies with getting data that we don’t have in on promise clients. But the application always needs to be running.
Besides, when working in disconnected apps we need to consider other additional aspects. First, mobile devices and phones have less storage and processing capacity than a desktop or notebook computer. We need to use the local storage properly. We cant store locally a complete database.we need to use Wi-Fi connections when possible To keep down the cost of running a mobile application, and we should use a compact data format like JSON.Another consideration when working offline is that we are not working alone. Probably another disconnected user is working with the same data at the same time, and in some cases we need to resolve conflicts.All this is important, but the most important is that we need to have a local storage for the applications.
And the options we have many options to store data locally.We can store data using the file system, we can create files in any folder to store settings or whatever.Another option is to store the data using the app local storage, and isolated storage for the app. And another solution is to use third parties databases as SQLite.But besides, if we are using JavaScript to developing Store Apps or even HTML apps, we can use IndexedDB that allow us to store a pair key/value in a local database.These last options are the recommended when we need to manipulate a large quantity of data, because if we use other mechanism, we must implement our own mechanism for searching, sorting, etc.
SQLite is an embedded SQL database engine that does not have a separate server process. It’s working as library. The data isstored in a single file.Implementsmost of the SQL standard and we can use it in manyplatforms (…)
Now, we have an application that stores the data locally. And now we need to upload this data to an external server so that it could we shared between all the clients. We have many options, but I want to show you how to synchronize this data using Windows Azure Mobile Services. Do you know what Windows Azure Mobile Services is?Windows Azure Mobile Servicesenablesyoutoaccelerateyourmobileappdevelopmentbyproviding a fast and easywayto store data, authenticateusers, and sendpushnotifications. Today, we’vereleasedseveralimportantupdatesto Mobile Services, includingOptimisticconcurrency in structured data todetect and resolvescenarioswheretwoor more users are concurrentlyupdatingthesame data rowWindows Azure Mobile Services is a Windows Azure service designed to make it easy to create highly-functional mobile apps. Mobile Services brings together a set of Windows Azure services that enable backend capabilities for mobile apps. Mobile Services provides a set of REST APIs that are used to access and change table data and retrieve authenticated login information.
Windows Azure Mobile Services is a Windows Azure service designed to make it easy to create highly-functional mobile apps. Mobile Services brings together a set of Windows Azure services that enable backend capabilities for mobile apps. Mobile Services provides a set of REST APIs that are used to access and change table data and retrieve authenticated login information.Windows Mobile Service are perfect for create the backed of a Windows Store app, Windows Phone, iOS, Android, web applications.We can implementquicklycommontasks as userauthenticatio, sendpushnotifications, etc.
Whathappensifwehavetwoclients?In some scenarios Two or more clients may write changes to the same item, at the same time. Without any conflict detection, the last write would overwrite any previous updates.Optimistic Concurrency Control assumes that each transaction can commit without any lock.Windows Azure Mobile Services supports optimistic concurrency control by tracking changes to each item using the __version system property column that is added to each table. This is a new feature added past week.Before committing a transaction, optimistic concurrency control verifies that no other transaction has modified the data. If the data has been modified, the committing transaction is rolled back.
I’ll show you how to the application to detect these write conflicts through the __version system property. The application will be notified by a MobileServicePreconditionFailedException during an update attempt if the record has changed since the last query. It will then be able to make a choice of whether to commit its change to the database or leave the last change to the database intact. Forthis demo Imgoingto use the default solution.
Untilnowwehaveseenhowto store local data usingSQLite and howtosinchronizewithexternal server using C# in Windows Store apps.Ifyou are using JavaScript you can do thesame. You can use SQLitedirectlyfrom JavaScript a Windows RT component and use SQLite
But in Windows Storeswith JavaScript wehaveanotherengineto store data locally.
IndexDBis a databaseengingsuportedbymany browsers and Windows Store appusingJavascript.We can store pairkey / value and each record isidentifiedby a uniquekey.We can store largeamount of data, images, objects, arrays, etc.
Here we can see how to work with indexeddb.Howwe open a database.Howwecreate a transaction. When working with data in indexeddb it’s necessary to use a transaction. Transactions take two arguments. The first is an array of tables you’ll be working with. Most of the time this will be one table. The second argument is the type of transaction. There are two types of transactions: readonly and readwrite. Adding data will be a readwrite operation. And then web can add a entityusingmethodadd.
Instead of using indexed directly we can use other libraries. In the next demo, I will show you how to work with PouchDB. PouchDBstores data in local usingindexdb.This library is an implementation of Apache CouchDB that works in a native way in every browser using IndexedDB as storage system. It has the same model of data, the same API and the same conflicts resolution that CouchDB. But the most important is that allows to synchronize the data with a CouchDB Database. To show the use of PouchDBimgoiung to create a simple app that allow to edit the infomation from a customer list and we can synchronize with other devices.
Againefore I start, I want to thanks Sponsors:Aplixure, Microsoft Learning, Virsoft. Withoutthem, this Summit wouldn’t be posible!