核心数据是一个功能丰富且复杂的对象图管理框架,能够处理大量的数据。 SQLite存储可以通过数十亿行,表和列扩展到TB级数据库。除非您的实体本身具有非常大的属性或大量的属性,否则10,000个对象对于数据集而言被认为是相当小的尺寸。处理大型二进制对象时,请查看二进制大型数据对象(BLOB)。
二进制大数据对象(BLOB)
如果应用程序使用二进制大对象(BLOB),如图像和声音数据,你需要照顾,以尽量减少开销。一个对象被认为是小的还是大的取决于应用程序的使用情况。一般规则是小于兆字节的对象是小型或中型,而大于兆字节的对象很大。一些开发人员已经在数据库中使用10 MB BLOB获得了良好的性能。另一方面,如果应用程序在表中有数百万行,甚至128个字节可能是一个CLOB(字符大对象),需要将其标准化为一个单独的表。
通常,如果您需要将BLOB存储在持久性存储中,请使用SQLite存储。其他商店要求整个对象图驻留在内存中,并且存储写入是原子的(请参阅持久存储类型和行为),这意味着它们不能有效处理大型数据对象。 SQLite可以扩展以处理超大型数据库。正确使用SQLite可为数据库提供高达100 GB的性能,单行最多可容纳1 GB(尽管无论存储库有多高效,读取1 GB数据到内存中都是昂贵的操作)。
BLOB通常表示实体的属性 - 例如,照片可能是Employee实体的属性。对于小到中等的BLOB(和CLOB),为数据创建一个单独的实体并创建一对一的关系来代替该属性。例如,您可以使用它们之间的一对一关系创建员工和照片实体,其中从员工到照片的关系将替换员工的照片属性。这种模式最大限度地利用了对象断层的好处(参见断层和非断层)。只有在实际需要的情况下(如果关系被遍历),才能检索任何给定的照片。
但是,如果您能够将BLOBs作为资源存储在文件系统上并维护对这些资源的链接(如URL或路径),则更好。然后您可以根据需要加载BLOB。
+1。我不记得我在哪里阅读它,但有一个早期我学到的格言,如果我想弄清楚做什么的限制,那么我做错了。 – 2011-04-19 13:38:14
@Philip Regan - 我们必须保存大量的图像,因此现在更好地检查它,而不是稍后再考虑它? – itsaboutcode 2011-04-20 04:49:23
如果ypu're保存图片,最好将它们保存到文件中,并将一个URL存储到Core Data中的所述文件中。存储大量的二进制数据最好在其他地方完成。 – paulbailey 2011-04-20 07:45:55