YapDatabase 是一个集合/键/值存储,并且更多。它是基于 sqlite 构建的,为 Swift 和 Objective-C 开发者设计,针对 macOS、iOS、tvOS 和 watchOS。
你好,世界!
// Create and/or Open the database file
let db = YapDatabase()
// Configure database:
// We're going to store String's in the collection "test".
// To store custom classes/structs, just implement Swift's Codable protocol.
db.registerCodableSerialization(String.self, forCollection: "test")
// Get a connection to the database
// (You can have multiple connections for concurrency.)
let connection = db.newConnection()
// Write an item to the database
connection.readWrite {(transaction) in
transaction.setObject("hello", forKey: "world", inCollection: "test")
}
// Read it back
connection.read {(transaction) in
let str = transaction.object(forKey: "world", inCollection: "test") as? String
// str == "hello"
}
YapDB 有以下特性:
- 并发性。您可以在另一个线程同时修改数据库的同时从数据库中读取。因此,您永远不必担心阻塞主线程,并且可以轻松在后台线程中将数据写入数据库。当然,您还可以同时在多个线程上从数据库中读取。
- 内置缓存。内置了一个可配置的对象缓存。当然,sqlite 也有缓存。但它缓存的是原始序列化的字节,而我们处理的是对象。因此,内置缓存意味着您可以直接跳过反序列化过程,以更快的速度获取到您的对象。
- 元数据。是否曾想将额外数据与您的对象一起存储?比如下载时的日期和时间戳。或者一个完全独立但相关的对象?幸运的是,元数据支持是标准的。还有一个独立的可配置缓存。
- 视图。需要过滤、分组和排序您的数据吗?没问题。YapDatabase 与视图一同提供。您甚至不需要编写晦涩的 SQL 查询。视图使用闭包,因此您只需提供一些原生代码。此外,视图会自动更新自己,并且它们使动态表格变得超级简单。
- 二级索引。通过索引重要属性来加快查询速度。然后使用 SQL 风格的查询快速找到您的项目。
- 全文搜索。基于 sqlite 的 FTS 模块(由 Google 贡献),您可以在几乎不费力的前提下为您的应用程序添加极其快速的搜索功能。
- 关系。您可以在对象之间设置关系,甚至配置级联删除规则。
- 钩子。当某些事件发生时,执行特定于应用程序的定制逻辑,例如对象被修改或删除时。
- 同步。支持与 Apple 的 CloudKit 进行同步,无需额外配置。甚至有一个完全功能性的示例项目,演示了编写同步 Todo 应用程序。
- 扩展。不仅是一个键/值存储,YapDatabase 内置了扩展架构。您甚至可以创建自己的扩展。
- 性能。在主线程上检索成千上万的对象而不会丢失帧。