「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」。
本文翻译自pub: hive | Dart Package (flutter-io.cn)
译时版本: hive 2.0.5
快速、 有趣且安全的 NoSQL 数据库
Hive 是用纯 Dart 编写的轻量且超级快速的键-值数据库。受 Bitcask 启发。
文档 & 示例 📖
如果需要查询、多isolate(隔离)支持或者在对象间链接,可查看 Isar 数据库。
特性
- 🚀 多平台:移动端、桌面端、浏览器
- ⚡ 优秀的性能(参考 性能基准)
- ❤️ 简单、强大且直观的 API
- 🔒 内置的强加密
- 🎈 无需 原生依赖
- 🔋 功能齐全
开始
查看 Quick Start 文档开始。
用法
可以像 Map 一样使用 Hive。无需 Futures
。
var box = Hive.box('myBox');
box.put('name', 'David');
var name = box.get('name');
print('Name: $name');
存储对象
Hive 不仅支持原始类型、列表和 Map ,也支持你想使用的任何 Dart 对象。需要生成类型适配器使其能够存储对象。
@HiveType(typeId: 0)
class Person extends HiveObject {
@HiveField(0)
String name;
@HiveField(1)
int age;
}
继承 HiveObject
是可选的,但它提供了一些方便的方法如
save()
和 delete()
。
var box = await Hive.openBox('myBox');
var person = Person()
..name = 'Dave'
..age = 22;
box.add(person);
print(box.getAt(0)); // Dave - 22
person.age = 30;
person.save();
print(box.getAt(0)) // Dave - 30
Hive ❤️ Flutter
Hive 在编写时考虑到了 Flutter。 如果应用需要一个轻量的数据库,那 Hive 是一个完美选择。 在添加所需的依赖和初始化 Hive 后,就可以在工程中使用 Hive 了:
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
class SettingsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ValueListenableBuilder(
valueListenable: Hive.box('settings').listenable(),
builder: (context, box, widget) {
return Switch(
value: box.get('darkMode'),
onChanged: (val) {
box.put('darkMode', val);
}
);
},
);
}
}
Box 会被缓存,所以足够快速以直接在 Flutter 组件的 build()
方法中使用。
(性能)基准
1000 读迭代 | 1000 写迭代 |
---|---|
SharedPreferences 在读性能方面和 Hive 差不多。SQLite 性能会差很多。 | 在写或删除方面,Hive 显著优于 SQLite 和 SharedPreferences 。 |
性能基准是使用 Oneplus 6T 的 Android Q 来测试。你可以自己运行基准测试 。
*对此性能基准可持保留态度。 客观地比较数据库是非常困难的,因为它们是为了不同的目的开发的。
许可证
Apache License, Version 2.0