在 Realm 中存储时区信息的最有效方法是什么?

What's the most efficient way to store time zone info in Realm?

我有一个包含 NSDate 时间戳的 Realm 对象,表示用户记录某事的时间。我需要为此添加时区信息,以便我知道用户创建对象时的本地时区(以便进行准确的日期格式设置和比较)。

Realm 数据库中会有很多这样的对象(可能每天使用应用程序都会创建其中的几个),但总的来说,我认为你不能说它会很大(一个繁忙的用户每年使用应用程序可能会创建几千个这样的对象)。

似乎最简单的设计是将timeZoneName存储为字符串(NSTimeZonename标识,例如"America/New_York")。这将导致每个领域对象重复大约 10-20 个字符的字符串。

这只是几个可能的字符串值的大量重复。我应该费心去优化这个吗?例如,有一个单独的 TimeZoneInfo 领域实体,该实体将有一个 属性 作为时区名称,并确保每个时区只有一个这样的实体。

澄清

让我把这个问题变成一个更 objective 的问题。在 Realm 数据库中什么会消耗最少的 space?

选项 1:

具有字符串 属性 的实体存储 NSTimeZone 的 name。此名称值的平均长度为 15 个字符。该实体可以有数千个实例。

选项 2:

带有字符串 属性 的实体 A 存储 NSTimeZone 的 name。只会有几个这样的实例(名称是唯一值)。 EntityB 引用 EntityA(它有一个 EntityA 类型的 属性)。可以有数千个 EntityB 实例。

基本上,存储数千个字符串或数千个实体引用效率更高吗?

选项 2 将使用较少 space,但在您的情况下可能不值得关心差异。

如果有 5000 个条目和选项 1,您将查看 160KB 的字符串数据(对于短字符串,存储大小四舍五入为每个数据块中的 O(1) 索引的 2 的幂),加上几百字节的数据结构开销。如果存储缩写就足够了,那么您将拥有大约 20KB 的字符串数据和类似数量的开销。使用选项 2,您只需要唯一的字符串数据加上每个条目 1 个字节(假设用户没有访问大量时区)。