map - 将映射键/值存储在持久文件中

标签 map dictionary go gob

我将创建一个或多或少的结构:

type FileState struct {
    LastModified int64
    Hash string
    Path string
}

我想将这些值写入文件并在后续调用中读取它们。我最初的计划是将它们读入 map 并使用键(路径)查找值(哈希和 LastModified)。在 Go 中有一种巧妙的方法吗?

如果没有,您可以推荐什么文件格式?我在以前的项目中阅读并尝试了一些键/值文件存储,但没有使用 Go。现在,我的要求可能相当简单,因此大型数据库服务器系统将是矫枉过正。我只想要一些我可以快速、轻松、便携地写入和读取的东西(Windows、Mac、Linux)。因为我必须在多个平台上进行部署,所以我试图将我的 non-go 依赖项保持在最低限度。

我考虑过 XML、CSV、JSON。我简要地查看了 Go 中的 gob 包,并注意到 Go 包仪表板上有一个 BSON 包,但我不确定这些是否适用。

我的主要目标是快速启动和运行,这意味着我需要编写的代码量最少并且易于部署。

最佳答案

只要您的整个数据都适合内存,就不会有问题。使用内存映射并定期将快照写入磁盘(例如,通过使用 gob 包)是一个好主意。 Practical Go Programming Andrew Gerrand 的演讲使用了这种技术。

如果您需要使用不同的程序访问这些文件,使用 json 或 csv 等流行的编码可能是个好主意。如果你只需要从 Go 中访问这些文件,我会使用优秀的 gob 包,它有 a lot of nice features .

一旦您的数据变大,每次更改时始终将整个数据库写入磁盘并不是一个好主意。此外,您的数据可能不再适合 RAM。在这种情况下,您可能需要查看 leveldb另一位 Go 开发人员 Nigel Tao 的键值数据库包。它目前正在积极开发中(但尚未可用),但它还将提供一些高级功能,如事务和自动压缩。此外,由于 leveldb 设计,读/写吞吐量应该相当不错。

关于map - 将映射键/值存储在持久文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749937/

相关文章:

c++ - 如何随机洗牌 map 中的值?

Java映射数据结构

python - 将字典的字典打印为表格

go - 捕获按键按下/向上事件

perl - 在 Perl 中如何使用 map() 将操作应用于散列的每个元素?

c++ - 自定义对象的 STL 集,每个包含一个 STL 集

python - 在 Python 列表中查找并返回重复值的名称和计数

c++ - std::map:它可以在插入键后复制和移动键吗?

java - 使用 Marathon/Mesos 的 Prometheus 动态端口服务发现

go - 我应该能够键入断言一段字符串映射吗?