【问题标题】:SQLite3: Batch Insert?SQLite3:批量插入?
【发布时间】:2011-05-02 05:33:15
【问题描述】:

我正在接手的项目中有一些旧代码。 我的首要任务之一是减少应用程序二进制文件的最终大小。 由于内容包含大量文本文件(大约 10.000 个),我的第一个想法是创建一个包含所有文本文件的数据库。

我不太习惯 SQLite 和 Core Data,所以我基本上有两个问题:

1 - 我的假设是否正确?我的 SQLite 文件是否应该比所有文本文件的大小都小? 2 - 有什么方法可以自动将它们全部放入我新创建的数据库(可能使用某种 GUI 或脚本),单个表中的每个记录一个文件?

我仍在尝试使用 CoreData,但我已经进行了大量搜索,但找不到与将所有内容放在数据库文件中相关的任何内容。事实证明,手动操作并非易事!

谢谢。

【问题讨论】:

    标签: iphone database sqlite core-data ios


    【解决方案1】:

    使用 SQLite 的替代方法可能是使用 zipfile。这很容易创建,并且肯定会确保空间安全(并且肯定会减少文件数量)。在 iphone 上有几种使用 zipfile 的实现,例如ziparchive 或 TWZipArchive。

    【讨论】:

    • 我对 zip 文件的主要担忧有两个:由于文本文件的重量约为 100 MB(所有文件加在一起),解压缩会影响性能,不是吗?而且,最终的应用程序,一个 .ipa 文件,已经压缩了所有内容。它类似于 .zip 中的 .zip。这真的会为我节省更多空间吗?
    • 您永远不需要真正解压缩整个文件。相反,您应该只提取那些您将要使用的文件。至于 ipa 已经是 zip 文件:我不知道它们是否在 iphone 上被提取;如果是,在 zipfile 中包含一个 zipfile 可能仍然有用。但是,对于 ipa 文件的大小,它没有任何区别。我怀疑所讨论的任何内容都会有所作为 - 您确实需要在文本文件本身中找到 zip 无法找到的冗余。
    • 作为 Mac 用户这么久,我忘记了我只能轻松解压缩选定的文件。谢谢,马丁。 – 这就是为什么我选择 Martin 的答案作为正确答案(也因为链接很棒),尽管 ldav1s 也提出了一个很好的观点。
    • 我是 TWZipArchive 的作者。它已重命名为SSZipArchive。
    【解决方案2】:

    1 - 它可能不会更小,但您可以在将文件存储到数据库之前对其进行压缩。或者没有数据库。

    2 - 当然。编写一个脚本来做到这一点应该不会太难。

    【讨论】:

    • 在存储到数据库之前如何压缩它们?根据我所学到的,我可以使用一些图像类型的文件,PFD 和 TXT。我弄错了吗?如果我不使用数据库,你会建议什么样的压缩?就像我问马丁一样,这不代表性能受到影响吗?
    • 有关 iPhone 压缩库的更多信息,请参阅 here。我猜你会在复制到 Xcode 项目之前压缩它们。 zlib 压缩是 CPU 密集度较低的 bzip2 例程(通常)。当然压缩会影响性能,但你必须看看你是否可以忍受它。我会使用 zlib,而不知道您的文件/应用程序性能。它相当快,并且可以将文本文件压缩得相当小。
    【解决方案3】:

    如果您正在寻找一个 SQLite 批量插入命令来为 2) 编写脚本,那么没有一个 AFAIK。在事务内的循环中准备好插入语句是您能做的最好的事情,我想插入 10,000 条记录只需要几秒钟(如果那样的话)。

    【讨论】:

    • 你能给我指出任何类似想法的教程吗?很抱歉,但我真的很了解 SQLite 数据库,而且我对它们几乎一无所知。
    猜你喜欢
    • 2010-11-24
    • 2010-09-26
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多