ios - 在事件源核心数据应用程序中将事件记录存储在哪里?

标签 ios objective-c core-data event-sourcing

我正在构建一个使用事件源模式的 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/

相关文章:

cocoa - NSManagedObject 和 KVO 与文档

swift - 核心数据: Transformable Type or To-Many Relationship?

ios - Tableview获取索引超出空数组范围

ios - pickerViews 崩溃

iphone - 连接到 Windows Live Messenger 网络时出现不可能的问题

iphone - 任何适用于 iOS 的 webdav 或 ftp 服务器源代码?

ios - 使用蓝牙在其他 iOS 设备上拍照

objective-c - objective-c 中的 ARC 循环引用使用委托(delegate)

ios - 无法使用 CIFilter 从 CIImage 中提取 UIImage

ios - UIProgressView 没有更新,但标题是