Hive
Hive 是一个用纯 Dart 编写的轻量级、极速的键值数据库。受 Bitcask 启发。
特点
跨平台 ⚡
- 在桌面、移动设备和浏览器上运行
- 性能非常好(请参阅基准测试)
易于使用 ❤️
- 键的类型为String或uint32,值可以是任意对象
- 基本操作是
put(key, value)、get(key)、delete(key) - 内置强大加密
轻量级?
- 运行时小
- 磁盘空间占用小
- 无原生依赖
基准测试
| 读取1000条记录 | 写入1000条记录 |
|---|---|
![]() |
![]() |
| 在读取性能方面,SharedPreferences与Hive相当。SQLite的性能则差很多。 | 在写入或删除方面,Hive的性能远超SQLite和SharedPreferences。 |
此基准测试在搭载Android Q的Oneplus 6T上进行。所有记录均逐一读写。您可以自行运行基准测试。
入门
要开始在Flutter项目中使用Hive,请将以下依赖项添加到您的pubspec.yaml文件中。请使用最新版本替换[version]。
dependencies:
hive: ^[version]
hive_flutter: ^[version]
dev_dependencies:
hive_generator: ^[version]
build_runner: ^[version]
用法
import 'package:hive/hive.dart';
void main() async {
Hive.init(Directory.current.path);
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而设计的。如果您需要一个轻量级的数据存储,那么它是完美的。在pubspec.yaml中添加所需的依赖项后,您就可以在项目中使用Hive了。
import 'package:hive/hive.dart';
import 'package:hive_flutter/hive_flutter.dart';
class SettingsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return WatchBoxBuilder(
box: Hive.box('settings'),
builder: (context, box) {
return Switch(
value: box.get('darkMode'),
onChanged: (val) {
box.put('darkMode', val);
}
)
},
);
}
}
Boxes是缓存的,因此速度足够快,可以直接用于Flutter小部件的build()方法中。
待办事项
Hive的工作才刚刚开始。如果您想做出贡献,如果您能帮助我完成以下一项,那将是非常棒的:
- [x] 良好的测试覆盖率
- [x] 许多示例,特别是针对Flutter的
- [x] 基准测试和比较
- [x] 完成API
- [x] 更多的测试
- [ ] 查询
- [ ] 改进文档
- [ ] 编写二进制格式规范
- [ ] 测试永远不嫌多

