Git Product home page Git Product logo

androiddatabaselibrarycomparison's Introduction

AndroidDatabaseLibraryComparison

A test between a few of the popular libraries running a speed test on how fast they load and save data.

Note: SugarORM and ActiveAndroid and Sprinkles were removed because they're too slow. If you're curious how well they run, you can uncomment the lines in MainActivity. SugarORM was a lot slower on load/save. ActiveAndroid and Sprinkles were a lot slower than the remaining comparisons on save.

Benchmark Description

There are two benchmarks. The Simple trial uses a flat schema for an address book so each row is composed of name, address, city, state, and phone columns. The Simple trial does 25000 copies of the AddressItem.

Simple Address Item Schema

The Complex trial is hierarchical and has support for multiple address books where each address book has contacts and addresses. The Complex trial does 50 copies of the AddressBook.

Address Book Schema

Results

These are the results for the Simple trial:

Simple Trial

And these are the results for the Complex trial:

Complex Trial

Older Results

These are the results for the Simple trial with the DBs that are no longer included currently:

Simple Trial

And these are the results for the Complex trial:

Complex Trial

Blog Post:

The original blog post can be found here

androiddatabaselibrarycomparison's People

Contributors

agrosner avatar alexrrouse avatar greenrobot avatar kenkyee avatar octohub avatar trevjonez avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

androiddatabaselibrarycomparison's Issues

Add missed benchmarks results

At the moment there are benchmarks results with 0 (zero) result time which is confusing. Very unlikely that it's the real results, so most likely it means the benchmark wasn't launched for that cases.
Cases with 0 results:

  • Sprinkles "save" for Complex Trial
  • Sprinkles "load" for Complex Trial
  • DBFlow "load" for Complex Trial

complextrial

In complex trial, why is copyToRealmOrUpdate() being called for contacts and address items?

On Realm Complex Trial code(RealmTester.java), if you call realm.copyToRealm(finalAddressBooks);, all contacts and address items referenced by these address books will be inserted as well. So why do you need to call copyToRealmOrUpdate() for contacts and items in each address book? This seems to have a big impact on Realm's performance.

That change was added on this commit: f79b824#diff-254e581a054b5c06b307166748225016

I don't understand the reason for this change. To me it seems like the code before this commit was correct.

"Complex Load" does not make much sense

The tests for "load" in the "complex trial", loads 50 address books and then walks along the relations potentially resolving them on the fly (doing database requests). I had a closer look why DbFlow takes just a few milliseconds (usually single digit) while all others take hundred of milliseconds. I think the test set up is questionable: after inserting the entities, they stay around in memory initialized with all relations already set up for DbFlow. So what happens is that DbFlow makes a single query and is done, while others must hit the database multiple times. So you test rather caching than loading. I could send a trivial PR for greenDAO in order to make the same caching work, which would also result in single digit ms test runs.

However, I'd rather propose to clear all caches before doing the complex load test to actually benchmark loading. For greenDAO, you can clear the memory "cache" using daoSession.clear(). I don't did not find the equivalent in DbFlow, so I could not try myself.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.