首页 > 数据库 >把git当作一个小型最终一致性的 json 数据库

把git当作一个小型最终一致性的 json 数据库

时间:2024-01-30 12:44:21浏览次数:36  
标签:文件 git 仓库 数据库 json 一致性 table

这几天写了一些有趣的代码:把git当作 json 数据库。做法是这样的:

  1. 创建一个git仓库
  2. 为每个最小粒度的数据创建一个独立的json文件({table}.json)
  3. 客户端通过 Python写git操作代码,实现几个数据库操作接口。

数据库操作接口最小集:

  • 初始化:把git仓库拉下来(这个后面可以优化为只拉取指定json文件) git init, git fetch, git checkout branch
  • 连接:要更新的时候,同步下最新,git checkout . + git clean -df . + git pull
  • 查询:直接读取仓库内的json文件, json.load(f)
  • 更新:比对并写入仓库内json文件, json.dump(table,f,indent=4)
  • 提交:推送, git add {table}.json, git commit -m f"update {table}", git push

对于 table 的设计:

  1. 拆分足够小的粒度,使得不同table之间相对独立,避免冲突,这种隔离使得,git push可以自动合并本地和远程仓库的不同(不同文件之间无冲突可自动合并)。
  2. 同table在更新机制上只要满足最终一致性即可,因此即使同文件发生并发导致某次push失败,也会被后续的更新解决。
  3. 对于性能要求不高,只要最终一致性满足即可

使用这样的方式好处是:

  1. 使用一个 git 仓库就可以做分布式有状态功能
  2. 获得 json table 的版本化支持,通过git的日志可以非常清晰地看到不同table的版本更新,方便比对
  3. 无需引入独立的数据库

--end--

标签:文件,git,仓库,数据库,json,一致性,table
From: https://www.cnblogs.com/math/p/17996860/git-as-json-database

相关文章

  • Walrus 实用教程|Walrus + Gitlab,打通CI/CD 自动化交付!
    Walrusfile是Walrus0.5版本推出的新功能,用户可以通过一个非常简洁的YAML描述应用或基础设施资源的部署配置,然后通过WalrusCLI执行walrusapply或在WalrusUI上进行import,将Walrusfile提交给Walrusserver,由Walrusserver完成对应用或基础设施资源的部署/配置/......
  • Asp .Net Core 系列:Asp .Net Core 配置 System.Text.Json
     目录简介Asp.NetCore如何配置System.Text.Json所有配置全局配置对比Newtonsoft.Json无实体类型下操作Json自定义转换器处理Dynamic类型封装常用配置封装JsonHelper帮助类null 简介System.Text.Json命名空间提供用于序列化和反序列化Jav......
  • ubuntu18.04 局域网配置git server步骤
    1.安装ssh2.安装gitsudoapt-getupdatesudoaptinstallvimsudoaptinstallopenssh-serversudoaptinstallgit3.cdhome目录mkdircodecdcodegitinit--baretest.git#创建git-server仓库远程服务器远程地址:/home/joker/code/test.git4.本地电脑目录操作......
  • 最全的项目部署+持续集成解决方案:Jenkins + git + docker
    最全的项目部署+持续集成解决方案:Jenkins+git+docker:https://blog.csdn.net/m0_45806184/article/details/126408527?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-126408527-blog-128137274.235^v43^control&spm=1001.21......
  • 手摸手教你 docker+jenkins+gitlab 部署你的前端项目
    手摸手教你docker+jenkins+gitlab部署你的前端项目 :https://blog.csdn.net/wx17343624830/article/details/128137274?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-128137274-blog-132392231.235^v43^control&spm=1001.2......
  • git 创建新的项目更换仓库地址
    #查看远端地址gitremote-v#查看远端仓库名gitremote#重新设置远程仓库gitremoteset-urloriginhttps://gitee.com/xx/xx.git(新地址)这样仓库地址更新完毕,有可能会遇到Git在尝试拉取远程分支main的时候发现两个分支的历史是不相关的(unrelatedhistories)......
  • 提升编码幸福感的秘密「GitHub 热点速览」
    写代码是一个充满挑战的事情,在这段充满挑战的旅途中,我们都渴望找到那个提升幸福感的秘密。没准是更先进或是更快的工具,希望本期热点速递的开源项目,能给你带来启迪和乐趣,上菜!第一个上场的是一款用Rust写的代码编辑器:Zed,因为它足够快、足够先进。全栈不等于全占Expo让你用一套......
  • git常用命令
    git是什么在日常的开发中,git命令用的非常多,在学git命令之前,首先讲一下远端仓库本地仓库的区别:远端仓库是一个在远端大家进行协作开发的仓库;本地仓库是自己本地的仓库,在本地开发调试完程序后,需要把程序推到远端的公共仓库。下面介绍一下,git用的比较频繁的指令:clone指......
  • gitlab-runner helm 安装问题记录
      首先说说安装步骤1、安装版本gitlab-runner-0.36.1.tgz  cat./gitlab-runner/values.yaml|grep-v"#"|sed-e'/^$/d'imagePullPolicy:IfNotPresentgitlabUrl:http://101.43.196.155:32080/runnerRegistrationToken:"Woq_Drxy-SSy1kQzJBZT&......
  • C++ Qt开发:运用QJSON模块解析数据
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QJson组件的实现对JSON文本的灵活解析功能。JSON(JavaScriptObjectNotation)是一种轻量级......