首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您将如何最小化或压缩核心数据sqlite文件大小?

您将如何最小化或压缩核心数据sqlite文件大小?
EN

Stack Overflow用户
提问于 2011-10-21 23:29:00
回答 3查看 2.5K关注 0票数 8

我有一个215 my的csv文件,我已经解析并存储在自己的自定义对象中的核心数据中。问题是我的核心数据sqlite大约是260 my。csv文件包含我市公交系统(公交站、时间、路线等)的大约450万行数据。

我尝试修改属性,以便将表示停止时间的字符串数组存储为NSData文件,但出于某种原因,文件大小仍然保持在260 at左右。

我不能发布这么大的应用程序。我怀疑有人会想下载260 on的应用程序,即使这意味着他们有整个城市的交通时间表。

是否有任何方法来压缩或最小化所使用的存储空间(即使这意味着不使用核心数据,我也愿意听取建议)?

编辑:,我现在只想提供一个更新,因为我一直在难以置信地盯着文件大小。通过一些涉及字符串、索引和数据库规范化的巧妙操作,我成功地将压缩后的大小缩小到6.5MB或2.6MB。大约有105000个物体存储在核心数据中,这些数据包含了城市交通系统的全部细节。我现在快哭了,D':

EN

回答 3

Stack Overflow用户

发布于 2011-10-22 00:05:16

除非你原来的CSV是以一种非常愚蠢的方式编码的,它似乎不太可能不会小于100米,不管你怎么压缩它。对于一个应用程序来说,这仍然是非常大的。解决方案是将数据移动到web服务。您可能希望下载和缓存重要的部分,但是如果您谈论的是数百万条记录,那么从服务器获取似乎是最好的方法。此外,我不得不相信,过境系统不时变化,这将是令人沮丧的是,必须升级许多-10 s-MB的应用程序,每次有一个单一的停止调整。

我已经说过了,但实际上有些事情你可能会考虑:

  • 将布尔人移到了一些领域。你可以把64个布尔人放进NSUInteger。(如果只需要8位,就不要使用完整的64位整数。)
  • 压缩存储时间的方式。一天只有1440分钟。您可以将其存储为2字节。传输时间通常不是第二个;它们不需要一个compressed.
  • Obviously。周中的
  • 日和日期也可以是

,您应该对任何字符串进行规范化。看看CSV在许多行上复制的字符串值,

  • I通常会推荐原始的sqlite而不是核心数据来解决这类问题。核心数据更多地是关于对象持久性的,而不是原始数据存储。你看到CSV比CSV膨胀了20% (这本身并不是高效的),这并不是解决这个问题的好方向。如果你想变得更紧,并且不需要很好的搜索能力,你可以创建打包的数据块。我以前在手机交换机上这样做,那里的内存非常紧。您创建一个位字段结构,并为一个变量分配5位,为另一个变量分配7位等等,然后对一些事情进行调整,以便它们在单词边界上正确排列,您就会变得非常紧凑。

由于您最关心的是您的初始下载大小,并可能愿意扩展您的数据,以便更快的访问,您可以考虑非常特定领域的压缩。例如,在上面的讨论中,我提到了如何一次降低到2个字节。在许多情况下,您可能会将时间从上次的增量分钟存储到1字节(因为大多数时间都会以相当小的步数增加,如果它们是公交车和火车时刻表)。放弃数据库,您可以创建一个非常严格编码的数据文件,您可以在第一次启动时将其解压缩到数据库中。

您还可以使用特定于域的知识将字符串编码为较小的令牌。如果我对纽约地铁系统进行编码,我会注意到有很多字符串出现,比如“大道”、“道路”、“街道”、“东方”等等。我可能会将这些字符串编码为无法打印的ASCII,比如^A、^R、^S、^E等等。我可能会将"138街“编码为两个字节(0x8A13)。当然,这是基于我的知识,在纽约的地铁站里,è(0x8a)从来不会出现。这不是一个通用的解决方案(在巴黎,这可能是一个问题),但它可以用于高度压缩您有特殊知识的数据。在华盛顿特区这样的城市,我相信他们的最高编号的街道是38街,然后是一个4值的方向。所以你可以用两个字节编码,首先是一个“有编号的街道”标记,然后是一个位字段,象限是2位,街道数是6位。这种想法可能会大大缩小您的数据大小。

票数 8
EN

Stack Overflow用户

发布于 2011-10-21 23:43:40

您可能可以执行一些数据库规范化。

查找可能是冗余的内容或存储在多行中的相同值。您可能需要重新构造数据库,以便将这些重复的值(如果有的话)存储在单独的表中,然后通过id从原始行中引用。

票数 0
EN

Stack Overflow用户

发布于 2011-10-21 23:53:47

sqlite文件压缩得有多大?如果它是令人满意的小,最简单的事情是把它压缩,然后解压缩到NSCachesDirectory。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7856356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档