使用 Realm 高效地实现查找或创建
Efficiently implementing find-or-create with Realm
我正在将 Mac OS X 上的 Core Data 应用程序转换为使用 Realm。该应用程序的一个功能是维护一个文件库,在我的 Core Data 代码中,我用了一些篇幅来确保高效地执行数据导入。我使用的技术使用了镜像Apple's advice(它似乎已经消失了)但本质上是这样的:
- 获取要导入的文件列表
- 执行批量查询(IN 谓词)以确定哪些文件已经导入。
- 导入其他的
这在 Core Data 中比检查单个项目更有效,因为它只访问数据库一次而不是每个项目一次。
在Realm中应该遵循哪些技术来保证数据的高效导入?
我会给出以下一般性建议:
- 对大批量写入事务进行组创建操作。 (你似乎已经这样做了。)
- 为您的 URL 属性 添加索引/主键。
您可能可以查询每个项目并在需要时创建它,几乎与 select 具有大型 IN 谓词的相关项目一样快。由于 Realm 的查询引擎基于对象 DSL,因此 "a trip to the database" 没有真正的开销。 IN 谓词实际上就是多个索引检索的析取。所以你真的只是构造多个小查询与通过大 NSPredicate
.
构造一个大查询的区别
我正在将 Mac OS X 上的 Core Data 应用程序转换为使用 Realm。该应用程序的一个功能是维护一个文件库,在我的 Core Data 代码中,我用了一些篇幅来确保高效地执行数据导入。我使用的技术使用了镜像Apple's advice(它似乎已经消失了)但本质上是这样的:
- 获取要导入的文件列表
- 执行批量查询(IN 谓词)以确定哪些文件已经导入。
- 导入其他的
这在 Core Data 中比检查单个项目更有效,因为它只访问数据库一次而不是每个项目一次。
在Realm中应该遵循哪些技术来保证数据的高效导入?
我会给出以下一般性建议:
- 对大批量写入事务进行组创建操作。 (你似乎已经这样做了。)
- 为您的 URL 属性 添加索引/主键。
您可能可以查询每个项目并在需要时创建它,几乎与 select 具有大型 IN 谓词的相关项目一样快。由于 Realm 的查询引擎基于对象 DSL,因此 "a trip to the database" 没有真正的开销。 IN 谓词实际上就是多个索引检索的析取。所以你真的只是构造多个小查询与通过大 NSPredicate
.