天下一「AndroidのORM」武道会(2019: FINAL) スペックシート
 Share
The version of the browser you are using is no longer supported. Please upgrade to a supported browser.Dismiss

View only
 
 
ABCDEFGHIJKLMNOPQRSTUVWXYZAAAB
1
2018/10/07ORMLitegreenDAOActiveAndroidRoomSugarORMDBFlowDBToolsCupboardSlim RepoRushOrmSquiDBOrmaQuantumFluxCPOrmAndroid-ORMElectrarequeryFreezerStorIOSQLiteMagicReActiveAndroidRealmPaperObjectBox
2
バックエンドSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLiteSQLite独自形式独自形式独自形式
3
deprecated?Yes
4
Websitehttp://ormlite.com/http://greendao-orm.com/http://www.activeandroid.com/https://developer.android.com/topic/libraries/architecture/roomhttp://satyan.github.io/sugar/http://www.rushorm.co.uk/http://www.ieclipse.cn/p/Android-ORM/http://realm.io/https://objectbox.io/
5
PrimaryRepo URLhttps://github.com/j256/ormlite-androidhttps://github.com/greenrobot/greenDAOhttps://github.com/pardom/ActiveAndroidhttps://github.com/chennaione/sugarhttps://github.com/agrosner/DBFlowhttps://github.com/jeffdcamp/dbtools-androidhttps://bitbucket.org/littlerobots/cupboardhttps://github.com/slim-gears/slimrepohttps://github.com/Stuart-campbell/RushOrmhttps://github.com/yahoo/squidbhttps://github.com/maskarade/Android-Ormahttps://github.com/himanshu-soni/QuantumFluxhttps://github.com/Wackymax/CPOrmhttps://github.com/Jamling/Android-ORMhttps://bitbucket.org/txdrive/electrahttps://github.com/requery/requeryhttps://github.com/florent37/Freezerhttps://github.com/pushtorefresh/storiohttps://github.com/SiimKinks/sqlitemagichttps://github.com/ImangazalievM/ReActiveAndroidhttps://github.com/realm/realm-javahttps://github.com/pilgr/Paperhttps://github.com/objectbox/objectbox-java
6
├ userNamej256greenrobotpardom#N/Achennaioneagrosnerjeffdcamp#N/Aslim-gearsStuart-campbellyahoomaskaradehimanshu-soniWackymaxJamling#N/Arequeryflorent37pushtorefreshSiimKinksImangazalievMrealmpilgrobjectbox
7
└ repoNameormlite-androidgreenDAOActiveAndroid#N/AsugarDBFlowdbtools-android#N/AslimrepoRushOrmsquidbAndroid-OrmaQuantumFluxCPOrmAndroid-ORM#N/ArequeryFreezerstoriosqlitemagicReActiveAndroidrealm-javaPaperobjectbox-java
8
min API Level? (4で動作報告あり)>= 4?>= 14>= 4>= 4?>= 7>= 10>= 4?>= 15>= 12?>= 15>= 14>= 14>= 14? (sample: >= 16)>= 14>= 9>= 8
9
ライセンスISC License
DaoCoreはApache License 2.0
DaoGenerator, DaoTestはGPL v3
Apache License 2.0Apache License 2.0MIT LicenseMIT LicenseApache License 2.0Apache License 2.0Apache License 2.0Apache License 2.0Apache License 2.0MIT LicenseApache License 2.0MIT LicenseApache License 2.0Apache License 2.0Apache License 2.0Apache License 2.0Apache License 2.0Apache License 2.0MIT LicenseApache License 2.0Apache License 2.0Apache License 2.0
10
versionName5.13.2.23.1.0-SNAPSHOT2.0.01.54.2.411.0.02.2.00.9.161.3.03.2.35.0.20.9.33.0.91.2.01.0.21.5.12.1.03.0.00.23.11.4.35.8.02.62.2.0
11
初版リリース日2010/01/082011/08/042010/10/252017/05/172011/08/122014/09/072013/04/252013/04/192015/03/302015/01/232015/04/162015/11/092015/08/072015/03/202014/10/252016/06/032016/01/272016/01/082014/08/312016/11/242017/10/272012/07/042015/06/032017/01/24
12
最新版リリース日2018/02/202017/04/052014/10/072018/10/012016/03/052017/12/292018/11/052016/12/122016/02/222017/03/172016/12/142018/09/032016/09/082017/05/042018/06/042016/12/232018/03/262017/03/072017/12/212018/08/182018/06/072018/11/062017/10/212018/09/27
13
GitHub::Star#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?
14
GitHub::Fork#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?#NAME?
15
SecondaryRepo URL
https://github.com/j256/ormlite-core
https://github.com/jeffdcamp/dbtools-gen
16
├ userNamej256jeffdcamp
17
└ repoNameormlite-coredbtools-gen
18
LicenseISC LicenseApache License 2.0
19
Github::Star#NAME?#NAME?
20
GitHub::Fork#NAME?#NAME?
21
22
機能比較
23
提供媒体maven centralmaven centraljargooglemaven centralbintray jcentermaven centralmaven centralbintray jcentermaven centralbintray jcenterbintray jcenterbintray jcenterJitPackbintray jcentermaven centralbintray jcenterbintray jcentermaven centralbintray jcenterbintray jcenterbintray jcenterbintray jcenterbintray jcenter
24
モデル構築の仕組みReflectionCode Generation (Proprietary)ReflectionAPTReflectionAPTCode Generation (Proprietary)ReflectionAPTReflectionAPTAPTContentProviderContentProviderContentProviderAPTAPTAPTAPTAPTReflectionCode Generation (Proprietary)KryoCode Generation (Proprietary)
25
ドキュメントの有無
26
何らかのIDEプラグインの導入が必須ではない
27
bootstrapメソッドがあるか(init() など)
28
インスタンス管理が自動か(シングルトン化をライブラリが提供しているか)
29
初期データ投入の仕組みが提供されているか
30
初期データ投入の方法implement OrmSqliteOpenHelper#onCreate()implement DaoMaster.OpenHelper#onCreate()set db file to /src/main/assets , and write AA_DB_NAME meta-data element into AndroidManifest.xmlsee: https://gist.github.com/florina-muntenescu/697e543652b03d3d2a06703f5d6b44b5Migration version = 0DatabaseBaseManager#onCreate()SQLiteOpenHelper#onCreate()SquidbDatabase#onTablesCreated()SQLiteOpenHelper inside ContentProviderSQLiteOpenHelper#onCreate()SQLiteOpenHelper#onCreate()SupportSQLiteOpenHelper.Callback#onCreate()
だけどこれはAAC db-frameworkを使っている...
RealmConfiguration.Builder()#initialData()
31
自動マイグレーション
32
継承が必須か
33
データベースの定義方法SQLiteOpenHelperコード定義AndroidManifest.xmlアノテーションAndroidManifest.xmlアノテーションDatabaseBaseManagerSQLiteOpenHelperアノテーションAndroidManifest.xmlSquidbDatabaseOrmaDatabase.builder(), アノテーションAndroidManifest.xmlCPOrmConfigurationSQLiteOpenHelper inside ContentProviderSQLiteOpenHelperDatabaseSourceNo ( @Migration, @DatabaseName )SQLiteOpenHelperbuild.gradleアノテーションRealmConfiguration.Builder()Paper.book()MyObjectBox.builder()
34
テーブルの定義方法アノテーションコード定義アノテーションアノテーションアノテーションアノテーションXML未記入アノテーション未記入 (アノテーション)アノテーションアノテーションアノテーションアノテーションアノテーションアノテーションアノテーションアノテーションアノテーションアノテーションアノテーションNoNoアノテーション
35
フィールドの定義方法アノテーションコード定義アノテーション未記入 (アノテーション)未記入 (アノテーション)アノテーションXML未記入 (アノテーション)未記入 (アノテーション)未記入 (アノテーション)未記入 (アノテーション)アノテーション未記入 (アノテーション)アノテーションアノテーション未記入 (アノテーション)未記入 (アノテーション)未記入 (アノテーション)アノテーション未記入 (アノテーション)アノテーションNoNo未記入 (アノテーション)
36
フィールド除外設定が可能か
37
除外設定の方法アノテーション未記入 / persisted = falseアノテーション未記入@Ignore or transient@Ignoreアノテーション未記入@Ignore@Ignored@RushIgnore@Ignore未記入未記入未記入@Ignore@Ignore@IgnoreColumn未記入 @Ignore, static transient
38
コンストラクタが必須ではない
39
JavaBeansが必須ではない
40
何らかのクエリー検索機能が存在するか
41
型安全なクエリー検索
42
自動生成されたフィールド名を用いたクエリー検索
43
RxJava(1) 対応
44
RxJava2 対応
45
coroutine対応
46
トランザクション対応
47
Kotlinフレンドリー
48
SQLiteOpenHelperの拡張が必須ではない
49
50
性能比較
51
10k Transaction ONAttempt: 1
52
INSERT688416662037321181350523893302350348462416655063377528648583296164638807100711626385421644138581
53
SELECT274548220272952866542133069318262433136910528834897102433262936825139886611197103
54
Attempt: 2
55
INSERT67001651202982150134712372330834944746237455623354656794826335116824882298191612364617664138584
56
SELECT274144720553012891500127470518612386145410138925177262435272937325940056721302103
57
Attempt: 3
58
INSERT66941679200312067133672477317336724892250455505333753814737335116164893297441631379016874118585
59
SELECT249549820152972899517129170318432394136010908614846832367269637928139956931218104
60
Average
61
INSERT6759.3333331665.333333202342111.66666713447.666672412.66666732613556.333333482824318.666675544.666667#DIV/0!34205448.66666748073332.66666716483.666678853.666667987816233763.3333331872.3333334131.333333583.3333333
62
SELECT2660.333333475.66666672032.333333297.66666672885.333333519.66666671298.333333700.33333331843.3333332404.3333331394.333333#DIV/0!1051.666667878.6666667496.6666667706.33333332411.6666672684.666667373.3333333263.66666673996675.33333331239103.3333333
63
64
10k Transaction OFFAttempt: 1
65
INSERT10931787805119921333971241041033761059801053911420301277591124683493556816936499184812899816422210109210721910696016311472283
66
SELECT302084200731527945801435741180924591478110098851178325952665338260420367380
67
Attempt: 2
68
INSERT10829685225117910330111233181044881058801060781423521191991104433501157536926659132312915016479410019110829010680315551272503
69
SELECT285884194331629455961410758204525201410108395050879726712653475239400670684
70
Attempt: 3
71
INSERT1076838648211751232491123946103101106645104315143996126312112268342945741293078915141292081629979929610790710775316462471544
72
SELECT298286203234028185561460745185823991440110094949180425462638366241403671576
73
Average
74
INSERT10843286504118447.666732966.33333123789.3333103655106168.3333105261.3333142792.6667124423.3333111726.3333#DIV/0!34746.6666757254.6666793130.6666791561.66667129118.6667164004.3333100193107805.3333107172161083.3333#DIV/0!72110
75
SELECT2953.33333384.666666671994323.66666672852.333333577.3333333143574819042459.3333331442.666667#DIV/0!1094.333333962.3333333503.3333333794.666666726042652393246.66666674081.666667698#DIV/0!80
76
77
備考1StorIOにはSQLiteを直に触るモードと、ContentProviderを経由するモードの2つが提供されている。今回はベンチ成績の良かったSQLiteモードを使用。ちなみにContentProviderモードでのスコアは以下の通り(1回のみ計測)RealmのSELECTは、RealmResult<E>の取得タイム+List<E>への変換タイム。なおRealmResultのみの取得タイムは以下の通り。
78
備考2
10k Transaction ON:
INSERT: 114654 ms
SELECT: 377 ms
"10k Transaction ON:
1/3: 2ms
2/3: 2ms
3/3: 2ms
79
備考3
10k Transaction OFF:
INSERT: 111160 ms
SELECT: 334 ms
10k Transaction OFF:
1/3: 7ms
2/3: 7ms
3/3: 7ms
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Loading...