一尘不染

将地图键/值存储在持久文件中

go

我将创建一个或多或少具有以下形式的结构:

type FileState struct {
    LastModified int64
    Hash string
    Path string
}

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

如果没有,您可以推荐哪种文件格式?我已经阅读并尝试了先前项目中的一些键/值文件存储,但并未使用Go进行试验。现在,我的要求可能非常简单,因此大型数据库服务器系统会显得过大。我只想要我可以快速,轻松和便携地读写的东西(Windows,Mac,Linux)。因为我必须在多个平台上进行部署,所以我试图将我的不依赖项降至最低。

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

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


阅读 212

收藏
2020-07-02

共1个答案

一尘不染

只要您的整个数据都可以存储在内存中,就不会有问题。使用内存映射并定期(例如使用gob软件包)将快照写入磁盘是一个好主意。Andrew
Gerrand撰写的实用Go编程讲座使用了这种技术。

如果您需要使用其他程序访问这些文件,则使用流行的编码(例如json或csv)可能是个好主意。如果您只需要从Go中访问这些文件,我将使用出色的gob软件包,它具有很多不错的功能

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

2020-07-02