微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ObjectBox Dart/Flutter 多隔离访问

如何解决ObjectBox Dart/Flutter 多隔离访问

a question stated in a comment创建一个单独的线程...

ObjectBox 如何处理并发(通过不同线程/隔离)写入请求?我的用例示例:FCM“onBackgroundmessage”调用在不同的隔离中运行,同时可能发生多个写入请求。在这种情况下,“Hive”完全失败了。 ObjectBox 有内置解决方案吗?

解决方法

用于 dart 的 ObjectBox 基于使用 Transactions 处理并发的原生 ObjectBox 核心库。让我挑出与问题相关的几点:

  • 事务管理多线程;例如事务与线程相关联,反之亦然。
  • 只读(只读)事务永远不会被阻止或阻止写入事务。
  • 任何时候都只能有一个写事务;它们严格地一个接一个地运行(顺序)。

至于Dart/Flutter中的isolates - 是的,它们可以安全地访问同一个store,您只需要确保它确实同一个本地store实例.为此,请执行以下步骤:

  1. 像往常一样,在您的主隔离区中创建一个 Store() 实例。
  2. 获取包含有关本机商店的信息的 ByteData store.reference
  3. 通过 SendPort 将此引用发送到另一个隔离。
  4. 在另一个隔离中,接收引用并使用 Store 打开本地 Store.fromReference(getObjectBoxModel(),msg as ByteData) 实例。
  5. 现在两个隔离都有自己的 Dart Store 实例,它们在内部使用相同的底层原生存储。因此,他们的事务是同步的,他们都看到相同的数据并收到有关数据更改的通知。 ?

你可以看到我刚刚描述这个测试用例的代码:https://github.com/objectbox/objectbox-dart/blob/461a948439dcc42f3956b7d21b232eb9c2bc26e1/objectbox/test/isolates_test.dart#L50

确保在另一个隔离仍在使用它时不要关闭商店。最好完全不要关闭它 - 这是没有大量后台工作的普通应用程序的最佳做法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。