SwiftLMDB

SwiftLMDB 是对 LMDB 键/值数据库的一个有主见的封装。

该封装抽象掉了 C API 及其一些概念。 取而代之的是,您将获得一个简洁的 Swift API,可以轻松地将任意值存储在快速的嵌入式数据库中。

唯一的要求是键和值可以转换为 Data。 为了断言这一点,键和值必须符合 DataConvertible 协议。 基础的 Swift 值类型开箱即用。

特性

SwiftLMDB 已经在 iOS 和 macOS 上进行了测试,但它也应该可以在 Linux 上运行。 欢迎测试。

要求

安装

Swift Package Manager

在您的 Package.swift 文件中将 SwiftLMDB 添加为依赖项。

dependencies: [
.package(url: "https://github.com/agisboye/SwiftLMDB.git", from: "2.0.0")
]

Carthage

要使用 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 公共许可证下获得许可。