我将创建一个或多或少如下形式的结构:
type FileState struct {
LastModified int64
Hash string
Path string
}我想将这些值写入一个文件,并在随后的调用中读取它们。我最初的计划是将它们读取到映射中,并使用键(Path)查找值(散列和LastModified)。在Go中有什么灵巧的方法可以做到这一点吗?
如果没有,你可以推荐什么文件格式?我在以前的项目中读到过一些关于键/值文件存储的文章并尝试过,但没有使用Go。现在,我的需求可能相当简单,所以一个大型的数据库服务器系统可能是多余的。我只想要一些我可以快速、轻松和便携地写入和读取的东西(Windows、Mac、Linux)。因为我必须在多个平台上部署,所以我试图将非go依赖保持在最低限度。
我考虑过XML、CSV、JSON。我看了一下Go中的gob包,注意到Go包仪表板上有一个BSON包,但我不确定这些包是否适用。
我在这里的主要目标是快速启动和运行,这意味着我需要编写的代码量最少,并且易于部署。
发布于 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的设计,读/写吞吐量应该非常好。
发布于 2013-05-03 14:59:05
我为go编写了一个有序的键值持久化库,叫做gkvlite --
发布于 2011-10-13 21:05:39
JSON非常简单,但由于变量名重复,所以会生成更大的文件。XML没有任何优势。你应该使用CSV,这也很简单。您的程序将生成少于一页的内容。
但实际上,这取决于您的修改。如果您进行了大量修改,并且必须将它们同步存储在磁盘上,那么您可能需要比单个文件更复杂的文件。如果您的映射主要是只读的,或者如果您能够负担得起将其转储到文件中,那么很少(不是每秒一次)在内存映射中使用单个csv文件,这将使事情变得简单而高效。
顺便说一句,使用go的csv包可以做到这一点。
https://stackoverflow.com/questions/7749937
复制相似问题