当前位置: 首页 > 面试题库 >

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

茹正祥
2023-03-14
问题内容

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

type FileState struct {
    LastModified int64
    Hash string
    Path string
}

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

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

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

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


问题答案:

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

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

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



 类似资料:
  • 本地持久化卷允许用户通过标准 PVC 接口以简单便携的方式访问本地存储。PV 中包含系统用于将 Pod 安排到正确节点的节点亲和性信息。 一旦配置了本地卷,外部静态配置器(provisioner)可用于帮助简化本地存储管理。请注意,本地存储配置器与大多数配置器不同,并且尚不支持动态配置。相反,它要求管理员预先配置每个节点上的本地卷,并且这些卷应该是: Filesystem volumeMode(默

  • 我想写一个脚本,它将2 GB的数据从硬盘加载到内存中,然后当其他程序请求时,它必须得到一个输入,并根据输入对这个数据进行一些计算。对我来说,重要的是将这2 GB的数据持久地保存在内存中,以加快计算速度,更重要的是避免巨大的I/O负载。 我应该如何将数据永远保存在内存中?或者更一般地说,我应该如何在Python中解决这样的问题?

  • 我有一个应用程序,为外部存储上的备份文件创建目录,并在用户退出应用程序时自动创建备份文件。每周创建一个备份文件,然后用最新信息覆盖一个备份文件。 无法在中找到备份文件,因为它们需要在用户重新安装应用程序后继续存在 我不能使用,因为它不是图像或视频 我无法使用在用户每次退出应用程序时要求他保存备份文件 那个么,如何使用新的作用域存储自动创建持久备份文件呢? (如果用户想要恢复其中一个备份文件,我还需

  • 本平台是通过storageclass来动态创建PV。也就是说咱们依赖于storageclass,如果您的Kubernetes不支持相应的存储试,将无法非常方便的进行挂载。 目前暂不支持挂载多个PVC,或许以后会更新吧。 这里演示的是用的NFS进行演示,实际使用时可根据自己的需求配置相应的provisioner,其他配置是一样的不需要调整,只需要在“模版管理” 调整StorageClass和Pers

  • 最近我发现了一个像Apache Mesos这样的东西。 在所有演示和示例中,这一切看起来都令人惊讶。我可以很容易地想象一个人将如何竞选无状态的工作--这自然符合整个想法。 3-请告诉我的方法在哲学方面是否是错误的(数据服务器的DFS和Mesos顶部的postgres之类的服务器的某种切换) 问题主要是从Apache Mesos的持久存储中复制的,由程序员堆栈交换上的zerkms提出。

  • 持久化存储的相关配置 这里使用的是NFS的方式进行持久化,如果您有自己的持久化方案可以不使用改方案。 $ kubectl apply -f install/kubernetes/storage/serviceaccount.yaml $ kubectl apply -f install/kubernetes/storage/rbac.yaml $ kubectl apply -f install/