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

Map 将映射键/值存储在持久文件中,map,dictionary,go,gob,Map,Dictionary,Go,Gob,我将创建一个或多或少的表单结构: type FileState struct { LastModified int64 Hash string Path string } 我想将这些值写入一个文件,并在后续调用中读取它们。我最初的计划是将它们读入映射并使用键(Path)查找值(Hash和LastModified)。在围棋中有没有巧妙的方法 如果没有,您可以推荐什么文件格式?在以前的项目中,我已经阅读并尝试过一些键/值文件存储,但没有使用Go。现在,我的需求可能相当简单,

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

type FileState struct {
    LastModified int64
    Hash string
    Path string
}
我想将这些值写入一个文件,并在后续调用中读取它们。我最初的计划是将它们读入映射并使用键(Path)查找值(Hash和LastModified)。在围棋中有没有巧妙的方法

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

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


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

JSON非常简单,但由于变量名重复,因此会生成更大的文件。XML没有优势。您应该使用CSV,这也非常简单。您的程序将生成少于一页的内容

但事实上,这取决于你的修改。如果您进行了大量修改,并且必须将它们同步存储在磁盘上,则可能需要比单个文件更复杂的内容。如果您的地图主要是只读的,或者如果您能负担得起很少(不是每秒钟)将其转储到文件中,那么内存中地图上的单个csv文件将使事情变得简单高效


顺便说一句,使用go的csv包来完成此操作。

只要您的entiere数据适合内存,您就不会有问题。使用内存映射并定期将快照写入磁盘(例如使用
gob
软件包)是一个好主意。安德鲁·格兰德的演讲使用了这种技巧

如果您需要使用不同的程序访问这些文件,那么使用流行的编码(如json或csv)可能是一个好主意。如果您只需要从Go中访问这些文件,我将使用优秀的gob包,它具有


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

我为go编写了一个有序的键值持久性库,名为gkvlite-

事实证明,gob是一个很好的解决方案。让我想起了C#中的序列化。它不可移植(跨语言),但现在不需要。感谢leveldb的提示,我会继续关注这个项目。gkvlite看起来不错,但是我觉得它已经不再被维护了