git - 滥用 Git 来实现事件存储架构?

标签 git github events architecture event-sourcing

Git 本质上是事件存储的实现,其中存储的数据是目录结构中的文件。已知可以可靠地解决问题:

  • 存储更改历史记录
  • 向客户端传输最少的数据以获取最新数据
  • 可以回滚到之前的状态

可以通过在 Git 上编写包装器来创建事件存储。

假设我的业务需求是需要存储可以以 JSON 格式表示的客户数据。数据可以由系统中的一项或多项服务修改。我可以拥有一个专用的 Git 存储库 Customer-Data,其具有扁平结构和名为 {customer-id}.json 的文件。当服务修改数据时,它会包含有用的提交消息。

此解决方案无法扩展(如果有太多客户且更改过于频繁,则远程 Git 服务(例如 GitHub)将受到请求和限制的轰炸),但假设我知道我将有大约 1,000 个客户,并且每个客户每 10 小时就有 1 次数据更改,该解决方案还有其他问题吗?

最佳答案

使用 Git 作为数据库通常是一个坏主意。它没有针对此用例进行特别优化,因为它写入的数据比数据库事务通常所需的数据多,通常需要 check out 整个树,并且如果将来需要扩展,则很难进行分片。它也无法在多主模式下运行以实现复制和可扩展性。

此外,如果您无论如何都这样做,您的历史记录将以一种病态的方式变大,由于 Git 删除对象的方式,使得打包和重新打包在 CPU 和内存方面变得异常昂贵。那时,您的 Git 托管提供商会注意到并要求您移至其他地方,此时您需要切换到真正的数据库。

关于git - 滥用 Git 来实现事件存储架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56671952/

相关文章:

git - 如何在 monorepo 中维护每个模块的自动更改日志?

git - git Blame --incremental 到底什么是增量?

git - 强制 "git status"在终端上输出颜色(在脚本内)

git - 使用 'git worktree' 将 git 2.5 用于多个工作目录的工作流程

javascript - 监听某个页面的 jQuery 加载事件

java - 从 Git 存储库将 Web 应用程序部署到 AWS

git - 从 github.io 中删除自定义 url

GitHub 疯狂地搞乱 Markdown - 将 666 更改为 DCLXVI

actionscript-3 - 在Flash AS3中,是否有办法在不检测MouseClick的情况下检测DoubleClick操作?

PHP & MySQL : Check if table's data has changed without polling?