SwiftLMDB 是对 LMDB 键/值数据库的一个有主见的封装。
该封装抽象掉了 C API 及其一些概念。 取而代之的是,您将获得一个简洁的 Swift API,可以轻松地将任意值存储在快速的嵌入式数据库中。
唯一的要求是键和值可以转换为 Data
。 为了断言这一点,键和值必须符合 DataConvertible
协议。 基础的 Swift 值类型开箱即用。
SwiftLMDB 已经在 iOS 和 macOS 上进行了测试,但它也应该可以在 Linux 上运行。 欢迎测试。
在您的 Package.swift
文件中将 SwiftLMDB 添加为依赖项。
dependencies: [
.package(url: "https://github.com/agisboye/SwiftLMDB.git", from: "2.0.0")
]
要使用 Carthage 将 LMDB 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它
github "agisboye/SwiftLMDB"
运行 carthage update
以构建框架并将 SwiftLMDB.framework
拖入您的 Xcode 项目。
首先导入模块。
import SwiftLMDB
数据库包含在环境中。 一个环境可能包含多个数据库,每个数据库都由其名称标识。
let environment: Environment
let database: Database
do {
// The folder in which the environment is opened must already exist.
try FileManager.default.createDirectory(at: envURL, withIntermediateDirectories: true, attributes: nil)
environment = try Environment(path: envURL.path, flags: [], maxDBs: 32)
database = try environment.openDatabase(named: "db1", flags: [.create])
} catch {
print(error)
}
任何符合 DataConvertible
的值都可以使用任何符合 DataConvertible
的键插入。
try database.put(value: "Hello world!", forKey: "key1")
当您需要从数据库中取回一个值时,您需要指定期望的类型(您放入的值的类型)和键。 这将返回您指定的类型的可选值。
if let value = try database.get(type: String.self, forKey: "key1") { // String?
// String
}
try database.deleteValue(forKey: "key1")
try database.exists(key: "key1") // Bool
从数据库中删除所有条目。
try database.empty()
database.count == 0 // true
从数据库中删除所有条目,并从环境中删除数据库。 调用此方法后,数据库将无法再使用,应将其丢弃。
try database.drop()
Database
符合 Sequence
协议,因此您可以迭代数据库中的所有(键,值)对。
for (k, v) in database {
let key = String(data: k)!
let value = String(data: v)!
}
非常欢迎贡献。 提出 issue 或提交 pull request。
SwiftLMDB 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE 文件。 LMDB 在 OpenLDAP 公共许可证下获得许可。