【发布时间】:2013-08-08 19:53:56
【问题描述】:
我正在开发一个基于 SQLite 数据库的字典应用程序,该数据库拥有超过 300,000 行。
问题在于,最终形式的数据库文件由全文索引表组成,重量远远超过 150Mb。
通过创建无内容的 fts4 表,我已设法将 .db 文件大小降至最低。 数据库不能再小了。我还设法将预先填充的数据库放入应用程序中,它工作正常。
问题是我不能只将最终的 .db 文件保存在 /assets 中并在第一次运行时将其复制到 sdcard,因为它太大了。我也不想在第一次运行时下载它。
批量INSERTing 数据,即使优化了事务和 sqlite,并且在开始时没有索引需要 永远,所以它也不是一个选项。
好消息是用于构建数据库的原始数据,以 CSV 格式和压缩,是 30Mb 并且 sqlite 的命令行.import 选项非常快(100,000 行大约 1 秒)但是...没有root权限就无法从应用程序访问。
我希望将应用程序与 /assets 中的压缩 CSV 文件捆绑在一起,解压缩它们,在 sdcard 上创建数据库,然后导入 CSV,但 似乎 在我看来是不可能的。尽管有许多字典应用程序似乎正是这样做的。 (下载的应用程序有十几兆字节,第一次运行时构建数据库,并在 sdcard 上占用数百兆字节的空间。
我该如何做到这一点?
过去两周我一直在研究这个问题,但完全没有想法。我是 Android 开发的新手,因此我们将不胜感激。
【问题讨论】:
-
事务 s 还是事务?仅对所有插入使用单个事务很快。
-
我的意思是单笔交易。确实需要几分钟。
-
您是否使用 PRAGMA 语句(在所有其他语句之前调用,sqlite 数据库上的第一个命令)来关闭 sqlite 同步模式(同步=关闭)并仅依赖操作系统来分析您的应用程序?还将日志模式更改为内存:sqlite.org/pragma.html#pragma_synchronous
-
是的。这显着加快了速度,但与 sqlite 命令行
.import相比仍然算不了什么。
标签: java android database sqlite csv