到目前为止,Android可以使用的数据库大概有以下几种:
…
虽然很多优秀的库都已经淹没在历史长河中,但并不能遮盖其曾经的辉煌,But我们只讨论常用的…
1. GreenDao 和 ObjectBox 的关系:
As we all know, GreenDao 和 ObjectBox 都出自于Square公司。
但是在 GreenDao Repo 的使用开头有这样一句话:
Check out our new mobile database ObjectBox (GitHub repo).
ObjectBox is a superfast object-oriented database with strong relation support. ObjectBox is embedded into your Android, Linux, macOS, or Windows app.
这不是摆明让我们使用ObjectBox嘛,— “赤裸裸的威胁”。
ObjectBox 是最快的对象型数据库。(PS: 真香!)
官方还贴心地为我们提供了 DaoCompat ,使我们可以快捷地从GreenDao切换到ObjectBox。
IAW, 抓紧用ObjectBox吧
2. Realm 和 ObjectBox,Room如何选择?
Realm, ObjectBox or Room. Which one is for you?
通过这篇文章,我们可以得出以下结论:
速度:ObjectBox > Realm > Room.
所占包体积:Realm(3.5M)> ObjectBox(1.5M) > Room(50KB).
如果我们更加注重速度:ObjectBox 无疑是最佳选择。
如果我们更加注重体积:Room 绝对是首选方案。
另外,在数据库存储时,安全性往往是我们不能忽略的一个因素。Realm提供了完备的功能,使我们方便快捷的解决安全性问题。
3. 如何解决 ObjectBox 和 Room的安全性问题?
SQL-Cipher扩展了Sqlite的功能,QLCipher需要重新编译SQLite,其本质上是SQLCipher对整个数据库文件加密。
详细内容可参考:android Jetpack Room之数据库加密
至于ObjectBox,目前来看,只能自己在存/取实现,或者等待官方支持。
4. Why not Room?
Room持久性库提供了SQLite的抽象层,以便在充分利用SQLite的同时允许流畅的数据库访问。编译器自动帮我检查SQL语句的语法问题。
Room 所占体积非常小(about 50KB)。
项目中有一个需求:限制数据库中的条目数
Room官方没有提供相应的API,需要自己去实现。
详细请参考:Limit the number of rows in Room
最后,Room为我们提供了完善的数据库升级方案。(ObjectBox更加强大)