为评论中陈述的问题创建一个单独的线程......
ObjectBox 如何处理并发(通过不同的线程/隔离)写请求?我的用例示例:FCM“onBackgroundmessage”调用在不同的隔离中运行,同时可能发生多个写入请求。在这种情况下,“Hive”完全失败了。ObjectBox 中是否有任何内置解决方案?
为评论中陈述的问题创建一个单独的线程......
ObjectBox 如何处理并发(通过不同的线程/隔离)写请求?我的用例示例:FCM“onBackgroundmessage”调用在不同的隔离中运行,同时可能发生多个写入请求。在这种情况下,“Hive”完全失败了。ObjectBox 中是否有任何内置解决方案?
dart 的 ObjectBox 基于原生 ObjectBox 核心库,它使用Transactions处理并发。让我挑出与问题相关的几点:
至于Dart/Flutter中的隔离- 是的,它们可以安全地访问同一个 store,你只需要确保它确实是同一个本地 store 实例。为此,请执行以下步骤:
Store()
像往常一样在主隔离中创建一个实例。ByteData store.reference
其中包含有关本机商店的信息。SendPort
。Store
实例,使用Store.fromReference(getObjectBoxModel(), msg as ByteData)
.Store
实例,它们在内部使用相同的底层原生存储。因此,他们的交易是同步的,他们都看到相同的数据并收到有关数据更改的通知。你可以看到我刚刚描述的这个测试用例的代码:https ://github.com/objectbox/objectbox-dart/blob/461a948439dcc42f3956b7d21b232eb9c2bc26e1/objectbox/test/isolates_test.dart#L50
确保在另一个隔离物仍在使用时不要关闭商店。最好不要关闭它——这是在没有大量后台工作的正常应用程序中的最佳实践。