这几天写了一些有趣的代码:把git当作 json 数据库。做法是这样的:
- 创建一个git仓库
- 为每个最小粒度的数据创建一个独立的json文件({table}.json)
- 客户端通过 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 的设计:
- 拆分足够小的粒度,使得不同table之间相对独立,避免冲突,这种隔离使得,git push可以自动合并本地和远程仓库的不同(不同文件之间无冲突可自动合并)。
- 同table在更新机制上只要满足最终一致性即可,因此即使同文件发生并发导致某次push失败,也会被后续的更新解决。
- 对于性能要求不高,只要最终一致性满足即可
使用这样的方式好处是:
- 使用一个 git 仓库就可以做分布式有状态功能
- 获得 json table 的版本化支持,通过git的日志可以非常清晰地看到不同table的版本更新,方便比对
- 无需引入独立的数据库
--end--
标签:文件,git,仓库,数据库,json,一致性,table From: https://www.cnblogs.com/math/p/17996860/git-as-json-database