当前位置:首页|资讯|ChatGPT|谷歌

Irmin——一个形似git的分布式数据库

作者:pathologyenigma发布时间:2023-01-28

前段时间开了用rust做web开发的坑,这次在下打算尽可能的做的好一些,故而选择一个完整的微服务项目,但苦于自己的相关项目经验并不多(只做过一些较为传统的web项目,和使用restful api或者graphql的单服务项目),于是这几天都在找资料,学习一些相关的知识(有时候问chatgpt居然比google搜索靠谱真的是有些出乎意料)

既然这次准备搞一波大的,那么使用传统数据库虽然也可以解决问题,但就失去了提升自我的能力,于是在一番查找之后发现了如题的这个数据库

简单的介绍一下这个数据库,就是一个类似git方式运作的数据库,使用者可以创建分支从远程库拉取分支,或者推送分支到远程库,合并本地的分支,该数据库就是以这种思路实现的分布式

该数据库由ocaml编写,这里我们并不需要了解ocaml,数据库本身是提供web api的,类似的提供web api的数据库还有arangodb(这个数据库我也有教程,它同样支持分布式部署【cluster或者官方的企业版】,另外需要注意的是这个数据库是图数据库,为了让不同系列的文章彼此独立,这里将不会使用该数据库),当然,如果你了解ocaml,则可以使用ocaml对该数据库的部署做更多的自定义配置,但很多时候我们只需要默认启动即可(如果有特殊情况,届时在下会简单的讲一下怎么写,毕竟ocaml在下自己也不熟悉)

各位可以在https://irmin.org/ 找到该数据库的相关信息,或者之前去看该数据库的GitHub页面,注意,如果您对开源数据库不报有信任,那么本系列,甚至本人的绝大部分文章可能都不适合您观看(在下的文章中使用到的数据库基本都是开源的)。该数据库可以直接通过opam(ocaml的包管理器)安装,但目前还没有看到别的方便的安装方式,所以,如果你介意因为该数据库而安装一份ocaml的环境,那么本系列文章的数据库部分可能就需要阁下自行想办法了(并不影响其他部分的使用)

这里在下选择的是在wsl中装一份ocaml环境(在下的Linux系统的pc出现了硬件层面的损坏,由于不确定具体硬件,并自己瞎折腾的情况下,目前应该是永久的失去该pc,短期内无法提供原生Linux系统相关的内容),之所以选择wsl除了括号里的内容外还因为即使是wsl也比在windows安装要方便,具体可以参考https://ocaml.org/docs/up-and-running,在下选择的是直接安装ocaml-platform,这样比较方便管理

然后当你完成了ocaml的安装之后,你只需要opam install irmin-cli即可,然后就可以使用该数据库的命令行工具,包括直接使用类似git的命令行进行增删改查以及一些创建web服务的方式,这里由于我们需要在项目中用代码来进行这些操作,故而先放弃直接使用命令行来操作(当然如果要了解可以自行irmin help查看),这里我们直接了解一些使用web服务的方式

irmin提供了内置的graphql支持,可以直接irmin graphql启动,下面是这个命令的细节:

相信这点简单的英文各位大佬应该都看得懂

这里我们使用如下的命令:irmin graphql -c json-value --root . -s git

创建一个graphql服务器,以json来存储数据,存储的目录为当前目录,存储方式使用与git等价的方式,然后我们可以打开8080端口下graphql路径,可以看到playground

接口数量并不多,整体使用就是git的那一套东西(不熟悉git的只能自行学习了)

先来看query

branchs和branch应该很熟悉了,就是查询分支相关的接口,两个参数为hash的接口是通过hash值来查询某一次commit或者内容,这个也是git的经典功能之一,这里也不赘述了,两个通过key获取值的接口与通过hash值获取数据的接口类似,hash值可以直接当成这里的key使用(不知道为啥),main则是获取主分支的数据

然后是mutation:

一些增删相关的接口
移除数据
合并相关操作
回滚和克隆
拉取和推送

至于subscription,就只有一个简单的接口用于追踪数据变化:

整体很简单,也没有特别复杂的地方,之后我们将在rust中使用graphql client简单的搭建一个数据库管理(更多使用会在后续的文章中引入,本次专栏只是一个引子)


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1