Hive

Hive 是一个用纯 Dart 编写的轻量级、极速的键值数据库。受 Bitcask 启发。

特点

跨平台 ⚡

  • 在桌面、移动设备和浏览器上运行
  • 性能非常好(请参阅基准测试)

易于使用 ❤️

  • 键的类型为String或uint32,值可以是任意对象
  • 基本操作是put(key, value)get(key)delete(key)
  • 内置强大加密

轻量级?

  • 运行时小
  • 磁盘空间占用小
  • 原生依赖

基准测试

读取1000条记录 写入1000条记录
benchmark_read benchmark_write
在读取性能方面,SharedPreferences与Hive相当。SQLite的性能则差很多。 在写入或删除方面,Hive的性能远超SQLite和SharedPreferences。

此基准测试在搭载Android Q的Oneplus 6T上进行。所有记录均逐一读写。您可以自行运行基准测试

入门

要开始在Flutter项目中使用Hive,请将以下依赖项添加到您的pubspec.yaml文件中。请使用最新版本替换[version]

Core version Generator version Hive Flutter version Build runner 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] 更多的测试
  • [ ] 查询
  • [ ] 改进文档
  • [ ] 编写二进制格式规范
  • [ ] 测试永远不嫌多

GitHub

https://github.com/hivedb/hive