同事们,我现在开发了一个公交时刻表的应用程序,之前我使用的是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()
Best Answer-推荐答案 strong>
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/
|