当前位置:  开发笔记 > 后端 > 正文

如何减小iphone的sqlite3数据库的大小?

如何解决《如何减小iphone的sqlite3数据库的大小?》经验,为你挑选了1个好方法。

编辑:非常感谢所有的答案.以下是目前应用优化后的结果:

切换到排序字符和运行长度编码 - 新的数据库大小42M

删除布尔值上的索引 - 新的DB大小为33M

非常好的部分是这不需要在iphone代码中进行任何更改

我有一个iphone应用程序,其中包含一个以sqlite格式保存的大型字典(只读).我正在寻找减少DB文件大小的想法,目前这个文件非常大.

以下是sqlite DB的条目数和结果大小:

franks-macbook:DictionaryMaker frank$ ls -lh dictionary.db
-rw-r--r--  1 frank  staff    59M  8 Oct 23:08 dictionary.db
franks-macbook:DictionaryMaker frank$ wc -l dictionary.txt
  453154 dictionary.txt

...每个条目平均大约135个字节.

这是我的数据库架构:

create table words (word text primary key, sowpods boolean, twl boolean, signature text)
create index sowpods_idx on words(sowpods)
create index twl_idx on words(twl)
create index signature_idx on words(signature)

以下是一些示例数据:

photoengrave|1|1|10002011000001210101010000
photoengraved|1|1|10012011000001210101010000
photoengraver|1|1|10002011000001210201010000
photoengravers|1|1|10002011000001210211010000
photoengraves|1|1|10002011000001210111010000
photoengraving|1|1|10001021100002210101010000

最后一个字段表示字谜检索的字母频率(每个位置在0..9范围内).两个布尔代表子词典.

我需要做以下的查询:

select signature from words where word = 'foo'
select word from words where signature = '10001021100002210101010000' order by word asc
select word from words where word like 'foo' order by word asc
select word from words where word = 'foo' and (sowpods='1' or twl='1')

我的一个想法是更有效地编码字母频率,例如将它们二进制编码为blob(可能有RLE,因为有很多零?).有关如何最好地实现这一点的想法,或其他减少尺寸的想法?我正在用ruby构建数据库,并在目标C中通过电话阅读它.

还有什么方法可以获得数据库的统计数据,所以我可以看到什么是使用最多的空间?



1> Jared..:

您是否尝试键入"vacuum"命令以确保您忘记重新捕获的数据库中没有额外空间?

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有