flutter数据库选型
# Flutter kv存储和数据库选型
# 1 原则和要求
- 跨所有平台,包括web
- 读写性能要好
- api要友好,不要晦涩
# 2 kv存储选型
存储少量的配置信息. 不宜用于存储大数据量的信息
Sp: 充分利用原生平台提供的kv功能.相应数据可以复用原生查看工具查看和修改.
get_storage: 完全的内存读写,异步序列化到指定文件-类似redis. 但其文件存储非常不便于查看.
最终选择: Sp
原因: 在原生侧能无缝对接操作. 一些简单数据无需通过methodChannel交互,直接可以通过sp交互.
# kv存储的一些库的性能对比
其中hive,moor(floor)也是kv存储,sqfl是关系型数据库
# hive
特点: kv存储,库比较重. 生态非常不错,支持web
# 3 关系型数据库
最终选型为isar
# Isar
本质还是kv,但操作api上更符合SQL的语法习惯,可以称之为真正的not only SQL.
支持所有平台
和 Hive 相比 isar 功能更丰富,不再只是单纯的 key-value 操作,可以支持更复杂的 filter 等查询条件,从使用体验上更符合 NoSQL 的数据库能力。
强大的可视化工具 ,通过 Isar Inspector 也是在一定程度补全了 Hive 的不足,使用 Inspector 只需要在 open 时设置 inspector: true
# 官方介绍的特性:
- 💙 Made for Flutter. Easy to use, no config, no boilerplate
- 🚀 Highly scalable The sky is the limit (pun intended)
- 🍭 Feature rich. Composite & multi-entry indexes, query modifiers, JSON support etc.
- ⏱ Asynchronous. Parallel query operations & multi-isolate support by default
- 🦄 Open source. Everything is open source and free forever!
Isar database can do much more (and we are just getting started)
- 🕵️ Full-text search. Make searching fast and fun
- 📱 Multiplatform. iOS, Android, Desktop and FULL WEB SUPPORT!
- 🧪 ACID semantics. Rely on database consistency
- 💃 Static typing. Compile-time checked and autocompleted queries
- ✨ Beautiful documentation. Readable, easy to understand and ever-improving
# api示例
final importantEmails = isar.emails
.where()
.titleStartsWith('Important') // use index
.limit(10)
.findAll()
2
3
4
5
# 性能
###web支持
如果需要支持web,需要使用2.5.0版本
3.x版本web暂未支持,其内部准备改用webassembly.
# sqflite
复用原生侧sqlite数据库
版本不可控,依赖原生系统的sqlite版本
基于ffi,不支持web. 目前只支持Android,ios,mac
# 一些sqlite的api封装
# floor
基于sqflite的api封装
# realm
# objectbox
# 4 存储加密方面的需求
you can always encrypt the data yourself before storing it in Isar if you feel like there is a need for it.
isar暂不支持加密,相关讨论 (opens new window)
不管是sp还是isar, 哪个字段要加密,自己加密后存储即可.
# 5 总结
kv存储使用sp,包装一个便捷工具类
数据库存储使用isar, 如果需要支持web,使用2.5.0版本