Skip to content

Dropbox Datastore is Deprecated #34

@andygeers

Description

@andygeers

We all need to find new solutions now that Dropbox have announced they are deprecating their Datastore service: https://blogs.dropbox.com/developers/2015/04/deprecating-the-sync-and-datastore-apis/

As I evaluate the different options, I thought it would be helpful to put it somewhere public where people could comment on it and we could keep it up-to-date as helpful suggestions come in.

Here are some of the alternative options:

Option 1) Rewrite ParcelKit using Core API

As a community, we could rewrite ParcelKit to use the Core Dropbox API, aiming to keep ParcelKit's API itself roughly unchanged. One could imagine using a Dropbox folder per Datastore "table", and one JSON file per "record" (using the record ID as the filename).

Pros:

  • to the end user, it carries on working much as before - they still use the same Dropbox account as before
  • Payment also remains the user's concern - it uses their storage quota and the user pays
  • Non-JSON content (i.e. files) can be stored alongside the JSON data
  • User data is encrypted

Cons:

  • Similar cons to the Dropbox Datastore itself - relative to other options, not all that many people have Dropbox accounts
  • Might require quote a lot of work to move to a totally different paradigm.

Challenges:

  • Dropbox have told me that the Core API does not support offline access in the way that the Datastore API used to
  • You would have to implement a way to handle merge conflicts - you'd lose the elegant way that the Datastore used to do it

Option 2) CouchBase Lite

See their blog post here: http://blog.couchbase.com/syncing-with-core-data

Pros:

  • Very similar model to ParcelKit / Datastore - you can drop in a plugin that makes your Core Data migrate nicely

Cons:

  • You have to run the open source CouchBase on your own server
  • You have to pay a lot if you want them to do support your CouchBase server

Option 3) Google Drive Application Data folder

Google Drive's API supports something called the "Application Data" folder: https://developers.google.com/drive/web/appdata

This would be akin to option 1 - just using Google Drive to store JSON files rather than Dropbox.

Pros:

Cons:

  • Might be even more work than migrating to the Dropbox Core API
  • There's a pretty tiny data limit on how much you can store in Google Drive's "Application Data" folder

Challenges:

  • How well does it handle merge conflicts?

Option 4) Amazon Cognito

As I understand it, Amazon has a roughly equivalent service to the Datastore: "Cognito" http://aws.amazon.com/cognito/

Pros:

  • Handles offline access nicely
  • roughly similar schema model to Datastore
  • most people have an amazon account

Cons:

  • There's a pretty tiny number of records permitted, making this essentially useless.
  • The developer has to pay all costs which scale according to the number of users and the amount of data they store.
  • This gets even worse if you support files such as photos alongside the JSON data (presumably you'd have to store that in your own S3 bucket?)

Option 5) Firebase / Parse

There are various third-party services that handle sync for you, top ones that come to mind are Parse and Firebase.

Roughly similar models to Amazon Cognito, except that I imagine you have to handle your own user registrations? (Anybody know?)

Pros:

  • Multi-platform
  • Both handle offline access nicely
  • Parse has a nice online admin dashboard
  • Parse has a large developer community

Cons:

  • Significant rewrite of your application from a ParcelKit world
  • The developer pays all costs
  • Where do you store non-JSON data such as photos?
  • Parse doesn't encrypt user data automatically

Option 6) CloudKit

For some people, CloudKit will be a suitable alternative, to sync their iOS-only Core Data database.

Pros:

  • Better than iCloud Core Data Sync used to be
  • All iOS users have an account?

Cons:

  • iOS only. For anybody with a cross-platform app to support this is a non-starter.

Anything else?

There's probably a million alternatives I've missed. Any suggestions?

I'm seriously considering undertaking Option 1 myself, because I have no money to pay for services such as Firebase / Parse! But I have a feeling it might turn out to be harder than I thought.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions