持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
本文翻译自 isar | Dart Package (flutter-io.cn)
译时版本: isar: ^3.0.1
Isar Database
快速开始 • 文档 • 示例应用 • 支持 & 想法 • Pub.dev
Isar [ee-zahr]:
- 德国巴伐利亚州的一条河流
- 快到疯狂的 NoSQL 数据库,用起来充满乐趣。
特性
- 💙 用于Flutter 易用、无配置、无模板文件。
- 🚀 高度可扩展 天空是它的极限(意在一语双关)
- 🍭 特性丰富 复合且多条目索引、查询修饰符、JSON 支持等。
- ⏱ 异步 默认支持 并行查询操作 和 多隔离。
- 🦄 开源 所有的都是永远开源和免费的!
Isar 可以做到更多(我们才刚刚开始)
- 🕵️ 全文检索 使检索快速且有趣
- 📱 多平台 iOS 、Android 、桌面和完整的 WEB 支持!
- 🧪 ACID 语义 依赖一致性
- 💃 静态类型 编译时检查和自动完成的查询。
- ✨ 漂亮的文档 可读、易于理解并在不断改进
加入 Telegram group 进行讨论,也能对新版本的 DB 先睹为快。
如果想要说感谢,可在 Github 上给个 star 或者在 pub.flutter-io.cn 给个 like 🙌💙
快速开始
非常荣幸你在这里!让我们开始使用最酷的 Flutter 数据库吧。。。
1. 添加到 pubspec.yaml
isar_version: &isar_version 3.0.1 # 定义要使用的版本
dependencies:
isar: *isar_version
isar_flutter_libs: *isar_version # 包含 Isar Core
dev_dependencies:
isar_generator: *isar_version
build_runner: any
2. 注解 Collection
part 'email.g.dart';
@collection
class Email {
Id id = Isar.autoIncrement; // 也可以使用 use id = null 用于自增
@Index(type: IndexType.value)
String? title;
List<Recipient>? recipients;
@enumerated
Status status = Status.pending;
}
@embedded
class Recipient {
String? name;
String? address;
}
enum Status {
draft,
sending,
sent,
}
3. 打开实例
final isar = await Isar.open([EmailSchema]);
4. 查询数据库
final emails = await isar.emails.filter()
.titleContains('awesome', caseSensitive: false)
.sortByStatusDesc()
.limit(10)
.findAll();
Isar Inspector
Isar Inspector 允许你实时查看应用的 Isar 实例和集合。可以执行查询、编辑属性、切换实例和排序数据。
CRUD 操作
使用 IsarCollection ,所有基本的 CRUD 操作都可用。
final newEmail = Email()..title = 'Amazing new database';
await isar.writeTxn(() {
await isar.emails.put(newEmail); // 插入 & 更新
});
final existingEmail = await isar.emails.get(newEmail.id!); // 获取
await isar.writeTxn(() {
await isar.emails.delete(existingEmail.id!); // 删除
});
查询
Isar 拥有强大的查询语言,它允许你使用索引、过滤唯一对象、使用复杂的 and() 、 or() 和 xor() 聚集、查询链接和排序结果。
final importantEmails = isar.emails
.where()
.titleStartsWith('Important') // 使用索引
.limit(10)
.findAll()
final specificEmails = isar.emails
.filter()
.recipient((q) => q.nameEqualTo('David')) // 查询嵌入的对象
.or()
.titleMatches('*university*', caseSensitive: false) // title 包含 'university' (忽略大小写)
.findAll()
数据库监视器
使用 Isar 数据库,可以监视集合、对象或查询。监视器会在事务成功提交并且目标真正改变时被通知。 监视器可以是延迟的并不会重新加载数据、或者可以是非延迟的并在后台取得新的结果。
Stream<void> collectionStream = isar.emails.watchLazy();
Stream<List<Post>> queryStream = importantEmails.watch();
queryStream.listen((newResult) {
// 进行 UI 更新
})
性能指标
性能指标只是提供了一个数据库性能的粗略的概念,但你也能看到,Isar NoSQL 数据库非常快。😇
如果你对其它的性能指标感兴趣,或者想测试下 Isar 在你的设备上的性能表现,你可以自己运行 benchmarks 。
单元测试
如果想在单元测试或者 Dart 代码中使用 Isar 数据库,在测试中使用 Isar 之前调用 await Isar.initializeIsarCore(download: true) 。
Isar NoSQL 数据库会为你的平台自动下载正确的二进制。
你也可以传递 libraries Map 为每个平台调整下载的位置。
确保使用 flutter test -j 1 避免并行运行测试。
这会打断自动下载。
贡献者 ✨
许可证
Apache License, Version 2.0 许可,可参考原文。