Core Data / SQLite是否压缩冗余信息?

时间:2013-11-24 22:07:05

标签: cocoa sqlite core-data

我想使用Core Data(可能使用SQLite支持)来存储大型数据库。 很多的字符串数据在众多行之间是相同的。 Core Data / SQLite是否会看到这样的冗余,并自动节省db文件中的空间?

在将数据添加到数据库之前,是否需要确保不同行中的相同文本是相同的字符串 object ?如果是这样,我如何检测新文本是否与现有数据库中 的内容匹配?

2 个答案:

答案 0 :(得分:1)

不,Core Data不会尝试分析您的数据以避免重复。如果你想保存1000万个具有相同属性的对象,你将获得1000万份副本。

如果要避免创建重复实例,则需要在创建新实例之前对匹配实例进行提取。一般方法是

  1. 获取与新数据匹配的对象 - 根据任何标准指示您的应用重复。将谓词与包含您不想复制的属性的提取一起使用。
  2. 如果您发现任何问题,可以(a)使用您拥有的任何新值更新您找到的实例,或者(b)如果没有新值,则不执行任何操作。
  3. 如果您找到任何内容,请创建一个新实例。

答案 1 :(得分:0)

应用层逻辑有助于以应用复杂性为代价来减少空间。

假设您的名字字段可以包含整数或字符串。 (SQLite的弱类型使这很容易)。

如果是字符串 - 这就是那里的名字。

如果是整数 - 请在名称表上查找,使用int作为键

当然,您必须在插入数据时动态创建该名称表,或者通过数据进行一次性拖网搜索,以便以这种方式代替新名称。