首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将映射键/值存储在持久文件中

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

Stack Overflow用户
提问于 2011-10-13 13:47:54
回答 3查看 6.3K关注 0票数 12

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

代码语言:javascript
复制
type FileState struct {
    LastModified int64
    Hash string
    Path string
}

我想将这些值写入一个文件,并在随后的调用中读取它们。我最初的计划是将它们读取到映射中,并使用键(Path)查找值(散列和LastModified)。在Go中有什么灵巧的方法可以做到这一点吗?

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-13 23:45:42

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

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

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

票数 10
EN

Stack Overflow用户

发布于 2013-05-03 14:59:05

我为go编写了一个有序的键值持久化库,叫做gkvlite --

https://github.com/steveyen/gkvlite

票数 2
EN

Stack Overflow用户

发布于 2011-10-13 21:05:39

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

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

顺便说一句,使用go的csv包可以做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7749937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档