【发布时间】:2013-11-24 22:07:05
【问题描述】:
我想使用 Core Data(可能带有 SQLite 支持)来存储大型数据库。 很多的字符串数据在许多行之间是相同的。 Core Data/SQLite 是否看到这种冗余,并自动节省 db 文件中的空间?
在将它添加到数据库之前,我是否需要确保不同行中的相同文本是相同的字符串object?如果是这样,我如何检测到新文本与现有数据库中的 anywhere 匹配?
【问题讨论】:
我想使用 Core Data(可能带有 SQLite 支持)来存储大型数据库。 很多的字符串数据在许多行之间是相同的。 Core Data/SQLite 是否看到这种冗余,并自动节省 db 文件中的空间?
在将它添加到数据库之前,我是否需要确保不同行中的相同文本是相同的字符串object?如果是这样,我如何检测到新文本与现有数据库中的 anywhere 匹配?
【问题讨论】:
不,Core Data 不会尝试分析您的数据以避免重复。如果你想保存 1000 万个具有相同属性的对象,你将得到 1000 万份。
如果您想避免创建重复的实例,您需要在创建新实例之前获取匹配的实例。一般的做法是
【讨论】:
应用层逻辑可以以应用复杂性为代价来帮助减少空间。
假设您的姓名字段可以包含整数或字符串。 (SQLite 的弱类型使得这很容易做到)。
如果是字符串 -- 那就是那里的名字。
如果是整数 -- 在名称表上查找它,使用 int 作为键
当然,您必须创建该名称表,或者在插入数据时即时创建,或者偶尔在数据中搜索值得以这种方式替代的新名称。
【讨论】: