最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

[已解决]swift中如何将Realm的数据库文件大小压缩到很小

iOS crifan 4091浏览 0评论

折腾:

[已解决]Xcode提交git项目到OSChina上的仓库时出错:curl error Send failure Broken pipe (-1)

之后,需要去:

搞懂,为何realm的数据库的文件为何这么大:

存储了3000多条数据

(与此对比:android的移动端的sql数据库的省市区的数据库文件,只有11M左右。)

此处的iOS中的,

移动端的realm数据库,只有3000多条记录,数据库文件竟然就占用了180多M

-》感觉应该是在10M前后,甚至更少才对。

所以去搞清楚:

realm swift size

App size after using realm · Issue #2581 · realm/realm-cocoa

Realm file size and space on disk · Issue #2852 · realm/realm-cocoa

ios – How does the size of a realm-file develop? – Stack Overflow

Realm Class Reference

ios – Realm: How to get the current size of the database – Stack Overflow

ios – Realm database file size – Stack Overflow

Realm manual install issues on iOS – Stack Overflow

realm swift database file too large

swift2 – Realm file size is too large – Stack Overflow

Re: [realm-cocoa] Archiving a project with realm swift adds 40MB to the binary – Google Groups

最后是:

从新用代码,将服务器端,省市区的3000多条数据,重新下载下来,并写入一个新的realm数据库中,得到完整的数据后,再去用:

writeCopyToURL

写入到另外一个文件

(内部实现了Compact模式,相当于压缩了)

相关代码:

        let ducumentPath2 = NSHomeDirectory() + “/Documents”
        let url = NSURL(string: ducumentPath2)
        //try realm.writeCopyToURL(NSURL(string: ducumentPath2)!)
        let fileURL = url!.URLByDeletingLastPathComponent!
            .URLByAppendingPathComponent(“default.realm”)
        do {
            try realm.writeCopyToURL(fileURL)
        } catch {
            //XCTFail(“writeCopyToURL failed”)
        }

最后压缩后到数据库,只有100多KB左右。

和之前的100多MB比,才是正常的,真正的,适合移动端的数据库的文件大小。

[总结]

默认情况下,Realm数据库的文件的大小,

感觉好像是:

增量式的去占用空间大小的

-》某人遇到原先直邮700多KB,数据稍微多一点,就变成1.4MB

-》空间就增大到原先多2倍了

-》然后数据继续增长,超过1.4MB,再去变成2倍大小

-》估计就是这个原因导致此处的,默认情况下,本来只需要占用很小空间的

3000多条数据

此处竟然占用了180多MB

-》然后是手动删除其中多某些列的数据,文件大小竟然不变

-》别人解释了原因:realm为了避免再次申请所需要的空间,在删除数据后,空间大小不变

-》想要将realm数据库文件大小减小,可以用writeCopyToURL去拷贝出另外一份,内部会执行Compact模式,进行数据压缩,去掉不必要的空间占用。

-》然后此处是,

为了更加降低空间占用,把原先存储的每条数据,从8列减少为4列

在同样是3000多条的前提下

保存后,用writeCopyToURL(压缩)导出后,对比效果十分明显:

原先realm数据库文件:180多MB

(去掉部分数据列再)压缩后的realm数据库文件:110多KB

-》整整差不多算是降低了1000倍!!!

-》最终算是,解决了,Realm数据库文件占用太大空间的问题。

转载请注明:在路上 » [已解决]swift中如何将Realm的数据库文件大小压缩到很小

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.176 seconds, using 22.13MB memory