Flutter 开发中的数据库选择(SQL or NoSQL?)

967 阅读4分钟

image.png

最近的毕设项目需要用到比较复杂的数据库,国内相关资料比较少,因此整理了一下国外的相关文章,希望能够帮到大家。

1.什么是数据库?

数据库是一种储存和调用数据的软件,具有结构化和永久性两个特点。相比于缓存(caching),数据库的储存更加可靠(永久性),除非被特意删除。

数据库允许开发者使用编程语言或者 API对数据进行保存(save),读取(save),修改(modify)和删除(remove)。这些指令将会在程序的后台进行执行。

CRUD(creat, read, update and delete)是最常见的数据库交互操作。

2.数据库的类型

数据库有很多种类型,在iOS/Android 开发中常用的有两种:

  • 非关系型数据库(NoSQL)
  • 关系型数据库(SQL) (关于两者的详细,本文只做简单描述,后面会写文章详细介绍)

3.非关系型数据库(NoSQL)

在非关系型数据库中,数据以非表格的形式储存,也就是说,如果你的数据属性不同,就需要选择这种数据库。NoSQL是基于结构化文件的储存形式,可以处理和储存多种类型的数据(jpg,html,音频,视频)

基于 Flutter 的 NoSQL数据库,最常用的是 Google Firebase,此外还有Objectbox,Hive 和 SharedPreferences。

3.1 Firebase

Firebase 是开发Flutter应用最常用的平台之一。常用功能包括云储存,实时数据库,登录验证(之后会发登录页面的实战就是基于Firebase)更多信息可以访问

Firebase 最大的有点就是云储存,也就是说我们可以同步多个设备的数据。在 Firebase 中有两种储存数据的方法:Firebase Storage,Firebase Firestore和 Realtime Database(实时储存).对于简单的数据存储,可以选用 Firebase Firestore, 实时数据选择实时储存。Firebase Storage 我没有用过。

3.2 Hive(蜂巢)

Hive(蜂巢)是基于 Dart 开发的轻型键值对数据库。更多信息请访问

Hive 的优点就是简单、易操作。下面是一个案例:

var box = Hive.box('myBox');
box.put('name', 'Ashley');
var name = box.get('name');
print('Name: $name');

3.3 ObjectBox(对象框)

ObjectBox 是一个超快速的数据库,用于储存本地对象。对象框的特点是可扩展性,静态数据型,跨平台使用(Android, iOS, web, and desktop), 以及内存性能良好。更多信息请访问

3.4 shared_preferences

Shared_preference也是一个比较常用的键值对本地储存方式。相对简单快速,缺点是不适合大量数据和列表的储存。具体使用方法和更多信息请访问 下面是一个简单的使用案例:

Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
_prefs.setInt("counter", 1);
var result = _prefs.getInt("counter");

4.关系数据库(SQL)

SQL 是具有相互关联的关系和值的数据集。通常以一组数据库表」行和列的形式出现。数据库的每一列都包含与特定类型有关的数据,并且字段包含属性的精确值。表的行表示一组相互关联的值。

在不改变数据库表的情况下,可以通过多种方式访问这些数据

4.1 sqflite

sqflite是 Flutter 的官方 SQL 插件。支持 iOS, Android 和 MacOS,这个插件提供了一些基础的数据库操作,包括打开,查询,删除,添加等。具体使用方法和更多信息请访问

4.2 drift

Drift, 就是以前的 Moor, 是基于 SQLite 构建的反应式持久性库。它更像是对 SQlite 包的包装,为我们提供了编写结构化关系数据库查询所需的相同功能和工具。主要优点是可以和 build_runner 一起使用。使用 build_runner 和 Moor,就不用手动输入所有查询。只需创建一个类,将想要的行和列指定为类中的字段,然后使用 build_runner 生成所需的数据库初始化代码。更多信息请访问

4.3 Floor

Floor 可以提供内存对象和数据库行之间的自动映射,以及通过 SQL 对数据库的完全控制。需要彻底掌握 SQL 和 SQLite 才能充分利用 Floor 的功能。更多信息请访问


我是虫二,不一样的程序媛!
程序员里最美的,美女里最会写代码的。
创作不易,还请多多支持。
欢迎私信讨论