1

我正在构建一个使用事件溯源模式的 iOS 应用程序;这个想法是您应该能够通过重播一系列事件随时重建应用程序状态。

每个事件都带有一个 UUID。应用程序的状态存储在一个持久的 Core Data 对象图中。

我对事件溯源的特殊实现保证了“至少一次”将事件传递给客户端。如果发生多次传递事件,我需要确保这些后续传递不会影响对象图。

我想保留一个事件记录——一组已经处理过的事件 UUID。这样,我可以根据事件记录检查传入的事件,如果它们已经被处理,则删除它们。

您将在哪里存储事件记录?

它需要与持久化的核心数据图“同步”。这尤其意味着:

  • 如果删除了 Core Data 对象图,那么事件记录也必须删除
  • 事件记录必须与核心数据对象图一起保存
4

1 回答 1

1

你也没有理由不能将它存储在 Core Data 中。就个人而言,如果我已经在使用 Core Data 来存储数据,那么我会使用它来存储所有数据,这样我就有一个可以使用的持久性接口,而不是试图对齐多个不同的接口。

更新 1

我知道你把它带到哪里去了。因此,您建议我使用 fetchRequest 来检查商店中是否存在具有该 UUID 的实体,而不是将 containsObject 发送到内存中的一组 UUID?由于必须对每个进入的事件执行此检查,我能做些什么来确保它的性能?

进行计数而不是获取。如果计数 >= 1,那么您已经拥有该事件。如果它是零,你不知道。对持久存储执行计数非常快。

其次,使用预先创建的 NSFetchRequest(和 NSPredicate)并在检查之间保留它。这将减少构建查询所需的时间。

于 2013-05-31T19:00:19.510 回答