ObjectBox
本文最后更新于:5 个月前
-
介绍:
好处:
-
速度快:
无论是传统的 sqlite 还是 Google 推荐的 realm 和 room , 甚至作者之前的产品 GreeDao 在速度上非常有优势.
从图上可以看出除了在加载 100k 的大量数据的时候 ObjectBox 的速度慢于 Realm,在执行其他数据操作的时候 ObjectBox 的性能对其他两位都是近乎碾压式的存在
官方说是世界上最快的嵌入式数据库!
为了提供高性能的数据库;我们开发ObjectBox。经过测试,ObjectBox是世界上最快的嵌入式数据库。
-
是一个 NoSQL 第三方数据库(不是 ORM)
ObjectBox 并不是一个典型 ORM,它是完全为对象构建的;所以它没有行,列和数据库。没有行,列和 SQL —— ObjectBox 是一个从零开始的对象数据仓库(没有 ORM,没有 SQLite)。
-
调试方便:
// 详情见下面的全局配置示例 AndroidObjectBrowser(boxStore).start(context.applicationContext)
adb forward tcp:8090 tcp:8090
在浏览器输入http://localhost:8090/index.html就可以在网页看到数据的内容了!
-
-
博客文章
https://juejin.im/post/5b1c34fae51d4506ce34a56b
https://juejin.im/post/5a0e7bdc6fb9a0451a75f38e
https://www.jianshu.com/p/e9996296a982
-
项目例子:
-
代码地址:
git@github.com:objectbox/objectbox-examples.git
-
心得体会
此项目有很多 module 使用 android-app-kotlin 这一个 module 就好
android-app-kotlin module 里面有两个类似的文件分别是 NoteActivity 和 ReactiveNoteActivity
其区别是,前者使用对数据进行更改需要刷新页面的时候,是使用重新查找全部内容然后重新渲染,并且调用 notifyDataSetChanged()方法实现,其思想较简单.
而 ReactiveNoteActivity 虽然也是重新查找数据并显示,但却是使用订阅观察者模式和多线程的方法,而和前者顺序顺序执行有所区别.
我猜测可能是基于效率和方便复用的考量
因为当用户增加文本的时候,会刷新全部数据,把最新的数据刷新上去,但是此时增加按钮应该是阻塞状态.(觉得这个想法有点牵强,不过也是因为这个比较简单的原因,如果是上传大文件或者是项目逻辑比较复杂的时候就应该很有用了)
复用是为了方便,因为不需要再每次的 addNote() 方法里面顺序调用 updateNotes() 方法重新查找并将数据保存到内存的list里面,而是隐式调用这个方法,减少模板代码的书写.
-
-
注意事项
-
先编译项目否则会提示有的类找不到
-
必须要一个自增 ID 才行, 用注解 @Id 标识
-
apply plugin: ‘io.objectbox’ 一定要添加到 dependencies 模块后面
-
但是,如果 put、find 这些方法全是同步的,对于大量数据的存和查都是耗时操作,如果直接写在主线程会阻塞主线程,尤其是 find 方法,而 ObjectBox 的 Reactive 封装显然没有 RxJava 那么强大,
-
尽量使用全局配置
object ObjectBox { lateinit var boxStore: BoxStore private set fun init(context: Context) { boxStore = MyObjectBox.builder().androidContext(context.applicationContext).build() if (BuildConfig.DEBUG) { val start = AndroidObjectBrowser(boxStore).start(context.applicationContext) Log.d(App.TAG, "browser start status: $start)") } } }
-
(手机路径)默认保存位置在 /data/data/包名/files/objectbox/data.mdb
-
设置查询个数
Query.find(Long offset, Long limit)
-
本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 。转载请注明出处!