登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-15 15:56:14 191浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《将映射键/值存储在持久文件中》,聊聊golang,希望可以帮助到正在努力赚钱的你。

问题内容

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

type FileState struct {
    LastModified int64
    Hash string
    Path string
}

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

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

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

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

正确答案

只要您的整个数据适合内存,您就不应该有问题。使用内存映射并定期将快照写入磁盘(例如通过使用gob包)是一个好主意。Andrew Gerrand的[Practical Go Programming](http://blip.tv/open-source-developers- conference/the-go-programming-language-4450722)演讲使用了这种技术。

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

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

今天带大家了解了golang的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>