技术经验谈 技术经验谈
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hss01248

一号线程序员
首页
  • 最佳实践

    • 抓包
    • 数据库操作
  • ui

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 总纲
  • 整体开发框架
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 学习资料

  • 技术选型

    • flutter总纲
    • 整体开发框架选型
    • ui组件框架选型
    • flutter数据库选型
      • kv存储的一些库的性能对比
      • hive
      • Isar
        • 官方介绍的特性:
        • api示例
        • 性能
      • sqflite
        • 一些sqlite的api封装
        • floor
        • realm
        • objectbox
  • 要点

  • 经验

  • flutter
  • 技术选型
hss01248
2023-03-31
目录

flutter数据库选型

# Flutter kv存储和数据库选型

# 1 原则和要求

  • 跨所有平台,包括web
  • 读写性能要好
  • api要友好,不要晦涩

# 2 kv存储选型

存储少量的配置信息. 不宜用于存储大数据量的信息

image-20230331101506331

image-20230331101516698

Sp: 充分利用原生平台提供的kv功能.相应数据可以复用原生查看工具查看和修改.

get_storage: 完全的内存读写,异步序列化到指定文件-类似redis. 但其文件存储非常不便于查看.

最终选择: Sp

原因: 在原生侧能无缝对接操作. 一些简单数据无需通过methodChannel交互,直接可以通过sp交互.

# kv存储的一些库的性能对比

其中hive,moor(floor)也是kv存储,sqfl是关系型数据库

image-20230331101851522

# hive

特点: kv存储,库比较重. 生态非常不错,支持web

image-20230331102117094

# 3 关系型数据库

最终选型为isar

# Isar

本质还是kv,但操作api上更符合SQL的语法习惯,可以称之为真正的not only SQL.

支持所有平台

image-20230331102416251

和 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()
1
2
3
4
5

# 性能

image-20230331103740704

###web支持

如果需要支持web,需要使用2.5.0版本

3.x版本web暂未支持,其内部准备改用webassembly.

详见这个issue (opens new window)

# sqflite

复用原生侧sqlite数据库

版本不可控,依赖原生系统的sqlite版本

基于ffi,不支持web. 目前只支持Android,ios,mac

image-20230331103113065

# 一些sqlite的api封装

# floor

基于sqflite的api封装

image-20230331103253416

# realm

image-20230331103847380

# objectbox

image-20230331105022529

# 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版本

编辑 (opens new window)
上次更新: 2023/05/04, 20:09:26
ui组件框架选型
dart语言核心要点

← ui组件框架选型 dart语言核心要点→

最近更新
01
截图后的自动压缩工具
12-27
02
图片视频文件根据exif批量重命名
12-27
03
chatgpt图片识别描述功能
02-20
更多文章>
Theme by Vdoing | Copyright © 2020-2025 | 粤ICP备20041795号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式