ios - 为什么 .sqlite 数据库的大小比 Realm 小很多?

标签 ios database sqlite realm

同事们,我现在开发了一个公交时刻表的应用程序,之前我使用的是sqlite。 数据库大小为 585kb,非常酷。我决定使用 Realm,在 json 解析后我看到大小 - 9,6Mb(超过 20 次)。 请告诉我为什么?这对我来说不是问题,但很有趣!

代码示例:

self.realm.beginWrite()

let file = Bundle.main.path(forResource: "file", ofType: "json")!
let url = URL(fileURLWithPath: file)
let jsonData = NSData(contentsOf: url)!
let json = try! JSONSerialization.jsonObject(with: jsonData as Data, options: [])                          
self.realm.create(DataRoot.self, value: json, update: true)                   
try! self.realm.commitWrite()

最佳答案

Realm 和 SQLite 的构建(和操作)方式截然不同。

Realm 的一个特性是允许从不同线程对多个版本的数据库进行无锁并发访问。这提供了对数据库的实时访问和隔离级别,这是 SQLite 提供的单点提取/插入数据库 API 无法实现的。

为了允许不同的线程同时访问不同版本的数据库,这些不同的“快照”按照写时复制方案存储在 Realm 中。一旦 Realm 可以检测到旧版本不再被访问,它可以将写时复制树的那部分标记为“未使用”。但是,为了防止过度分配,此时文件系统上的文件不会被截断,因此可以更快地完成写入 Realm 的新数据。

此功能实现方式的好处在于,如果您不想使用它(并像访问 SQLite 一样访问 Realm),则无需存储不同版本的开销,并且 Realm 文件可以小得多比存储在 SQLite 中的等效数据。

您可以在 Realm's docs 中阅读更多相关信息.

关于ios - 为什么 .sqlite 数据库的大小比 Realm 小很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40968553/

相关文章:

ios - 由于-5825,iPhone 屏幕录制无法保存

IOS Sinch Calling when Application is offline using APN(Get previously initiated Client)

MySQL 与 SQLite + UNIQUE 索引

database - 在多台服务器上部署redis

MySQL工作台,将select from view的结果导出为JSON

sqlite - 如何将 Sqlite 与 LiveCode 结合使用

objective-c - 自定义 UIProgressView 绘图怪异

ios - UIImageView 不会拉伸(stretch)到整个屏幕

python - 操作错误 : unable to open database file

c# - SQLite多线程插入到同一表导致FOREIGN KEY约束失败