2

我正在开发一个基于 SQLite 数据库的字典应用程序,该数据库具有超过 300,000 行。

问题是最终形式的数据库文件由全文索引表组成,重量超过150Mb

通过创建无内容的 fts4 表,我设法将 .db 文件大小降至最低。数据库不能更小。我还设法将预先填充的数据库放入应用程序中,它工作正常。

问题是我不能只将最终的 .db 文件保存在 /assets 中并在第一次运行时将其复制到 sdcard,因为它太大了。我也不想在第一次运行时下载它。

批量INSERT处理数据,即使对事务和 sqlite 进行了优化,并且在开始时没有索引也需要永远,所以它也不是一个选项。

好消息是用于构建数据库的原始数据,CSV 格式和压缩,是30Mb和 sqlite 的命令行.import选项非常快(约 1 秒内 100,000 行)但是......它不能从应用程序访问没有根权限。

我很想将应用程序与 /assets 中的压缩 CSV 文件捆绑在一起,解压缩它们,在 sdcard 上创建数据库,然后导入 CSV,但这在我看来是不可能的。尽管有许多字典应用程序似乎正是这样做的。(下载的应用程序有十几兆字节,第一次运行时构建数据库,并在 sdcard 上占用数百兆字节的空间)。

我该如何做到这一点?

在过去的两周里,我一直在研究这个,只是没有想法。我是 Android 开发的新手,因此非常感谢任何帮助。

4

2 回答 2

2
  • 方案A:发送一个压缩的SQLite数据库文件,安装后解压;您应该能够省略索引并在以后重建它们。
  • 计划 B:将 CSV 导入器的相关部分复制到您的应用程序中,发送一个压缩的 CSV 文件并将其加载到一个空数据库中,就像命令行工具一样。官方文档页面。
于 2013-08-07T12:45:45.057 回答
0

将整个内容创建为 csv 文件,可能是多个 csv 文件并压缩为 zip。压缩后文件变为 482KB 后,我检查了 32 mb csv 文件。

例如

数据1.csv 数据2.csv 数据3.csv 数据4.csv 数据5.csv

将文件压缩成data.zip并将文件放入asset文件夹,导入时 - 从zip中一一提取文件并插入sqlite db。

于 2013-08-07T12:42:47.670 回答