我有一个包含NSDate
时间戳的Realm对象,表示用户录制内容的时间。我需要为此添加时区信息,以便我知道用户创建对象时的本地时区(为了进行准确的日期格式化和比较)。
Realm db中会有很多这样的对象(可能每天都会使用应用程序创建其中的几个),但总的来说,我认为你不能说它会是一个过大的数字(忙碌)用户每年可能会在应用中使用几千个这样的对象。)
似乎最简单的设计是将timeZoneName
存储为字符串(NSTimeZone
由name
标识,例如" America / New_York")。这将导致每个领域对象重复大约10-20个字符的字符串。
很多重复只有几个可能的字符串值。我是否应该费心去优化呢?例如,有一个单独的TimeZoneInfo领域实体,它具有时区名称的单个属性,并确保每个时区只有一个这样的实体。
让我把这个问题作为一个更客观的问题。什么会占用Realm数据库中最少的空间?
选项1:
具有存储NSTimeZone的name
的String属性的实体。此名称值的平均长度为15个字符。该实体可能有数千个实例。
选项2:
EntityA,其String属性存储NSTimeZone的name
。只有少数几个实例(名称是唯一值)。
EntityB引用EntityA(它具有EntityA类型的属性)。可能有数千个EntityB实例。
基本上,存储数千个字符串或数千个实体引用是否更有效?
答案 0 :(得分:1)
选项2将使用更少的空间,但在您的情况下,差异可能不值得关注。
使用5000个条目和选项1,您将查看160KB的字符串数据(对于短字符串,在每个数据板中进行O(1)索引时,存储大小向上舍入为2的幂),加上几百字节的数据结构开销。如果存储缩写就足够了,那么你就更像是20KB的字符串数据和类似的开销。使用选项2,您只需拥有唯一的字符串数据加上每个条目1个字节(假设用户没有访问非常多的时区)。