将我的所有数据存储到sqlite后,它已经达到了14 MB。这就是为什么我担心有些人无法从连接缓慢区域下载我的应用程序。有没有办法缩小sqlite数据库?
答案 0 :(得分:22)
您是否尝试过VACUUM?
VACUUM命令可重建整个数据库。应用程序可能会这样做有几个原因:
- 除非SQLite以“auto_vacuum = FULL”模式运行,否则当从数据库文件中删除大量数据时,它会留下空白空间或“空闲”数据库页。这意味着数据库文件可能比严格必要的大。运行VACUUM以重建数据库将回收此空间并减小数据库文件的大小。
- 频繁的插入,更新和删除可能导致数据库文件碎片化 - 单个表或索引的数据散布在数据库文件周围。运行VACUUM可确保每个表和索引在数据库文件中大部分连续存储。在某些情况下,VACUUM还可以减少数据库中部分填充页面的数量,进一步减小数据库文件的大小......
VACUUM命令的工作原理是将数据库的内容复制到临时数据库文件中,然后使用临时文件的内容覆盖原始文件。覆盖原始文件时,使用回滚日志或write-ahead log WAL文件,就像使用任何其他数据库事务一样。这意味着当VACUUMing数据库时,在可用磁盘空间中需要的数量是原始数据库文件的两倍......
答案 1 :(得分:10)
一些提示:
SQLite有点懒于回收未使用的空间;使用VACUUM命令或auto vacuum mode。
数据库格式交换空间效率以便快速访问。如果你只是转储数据内容,无论是作为SQL转储还是只是每个数据库表的CVS文件,你可能会得到更小的文件。
使用数据库文件或纯数据,尝试压缩它们。
答案 2 :(得分:2)
尝试压缩它并使用zipinput流,同时从资产中解压缩数据库。无论如何,当你创建你的apk时,android会压缩你的14mb数据库(在安装过程中将解压缩),所以我猜你的apk大小将在5-6mb左右。
答案 3 :(得分:1)
我有sqlite的经验,我导入了大约3mb的数据,之后我意识到数据有编码问题。在修复编码问题后,我放弃了表,重新制作并重新导入数据。结果:一个6mb的sqlite文件。我的解决方案是删除sqlite db并创建一个新的。 (没有关于你在数据库中存储的内容的更多细节,这就是我能提供的所有内容......)
答案 4 :(得分:1)
您可以将应用程序与压缩的数据库文件(即.zip文件)捆绑在一起,并在首次运行应用程序时解压缩(记住删除.zip文件)。最好在SD卡上完成所有这些工作。
答案 5 :(得分:1)
将@Tono Nam的comment放入答案中。具有完整语法的示例始终非常有用。
在命令行上运行以下命令以使用vacuum
命令:
sqlite3 /path/to/your/db/foo.db 'VACUUM;'
答案 6 :(得分:0)