我正在构建一个使用事件源模式的 iOS 应用程序;这个想法是,您应该能够通过重播一系列事件随时重建应用程序状态。
每个事件都带有一个 UUID。应用程序的状态存储在持久的核心数据对象图中。
我对事件源的特定实现保证了将事件“至少一次”传递给客户端。如果发生多次传递事件的情况,我需要确保这些后续传递不会影响对象图。
我想保留一个事件记录 - 一组已处理的事件 UUID。这样,我可以根据事件记录检查传入事件,如果它们已被处理,则将其删除。
您将在哪里存储事件记录?
它需要与持久的核心数据图“同步”。这尤其意味着:
- 如果 Core Data 对象图被删除,事件记录也必须被删除
- 事件记录必须与核心数据对象图一起保存
最佳答案
您没有理由不能将其存储在核心数据中。就我个人而言,如果我已经使用 Core Data 来存储数据,那么我会使用它来存储所有数据,这样我就可以使用一个持久性接口(interface),而不是尝试对齐多个不同的接口(interface)。
更新1
I see where you're taking it. So instead of sending containsObject to a set of UUIDs in memory, you suggest that I use a fetchRequest to check for the existence of an entity in the store with that UUID? Since this check has to be performed on every event that comes in, what can I do to ensure that it's performant?
进行计数而不是获取。如果计数 >= 1,则您已经拥有该事件。如果它为零,则不会。对持久存储执行计数非常快。
其次,使用预先创建的 NSFetchRequest(和 NSPredicate)并在检查之间保留它。这将减少构建查询所需的时间。
关于ios - 在事件源核心数据应用程序中将事件记录存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16863804/