七叶笔记 » golang编程 » Golang开发的以Git思想打包的关系数据库

Golang开发的以Git思想打包的关系数据库

信息时代数据才是最重要的,数据的表现形式也越来越丰富。 Git 已经占领了VCS的天下,在其他方面的用途也在不断的拓展,比如Git管理网站,Git写书,本文我们介绍一个在数据领域的项目GitDolt。GitDolt以关系数据库和Git的启发,把SQL语句和Git的分发协作有机地结合,集众长于一身的解决方案。

概述

GitDolt本质上是一个关系数据库,即它具有表、视图等,也可以对表执行SQL查询。在表单元级别支持Git控制语句。GitDolt是一个支持细粒度的按值版本控制的数据库,其数据和架构的所有更改都存储在提交日志中。

为了管理方便,对标GitHub之于Git,GitDolt也提供了远程托管平台网站DoltHub,用于托管Dolt数据库的基于云的存储解决方案,可简化数据库的协作管理。

Dolt提供了类似于Git的所有控制语句见上面帮助信息。

init:创建一个空的Dolt数据仓库。

status:显示工作树状态。

add:添加表更改到暂存更改列表。

reset:从暂存更改列表中删除表更改。

commit:记录对存储库的更改。

sql:对存储库中的表运行SQL查询。

sql-server:启动与MySQL兼容的服务器。

log:显示提交日志。

diff:区分表格。

blame:显示表的每一行的修订、修改者以及最后修改的内容。

merge:合并分支。

brance:创建,列出,编辑,删除分支。

checkout:检出分支或从HEAD覆盖表。

remote:管理一组跟踪的存储库。

push:同步远程仓。

pull:从远程的远程数据存储库中获取并合并。

fetch:从远程数据存储库更新数据库。

clone:从远程数据存储库克隆。

creds:管理账号凭据。

login:登录到Dolt远程主机。

version:显示当前的Dolt cli版本。

config:Dolt配置。

ls:列出工作集中的表。

schema:用于显示和导入表模式的命令。

table:用于复制,重命名,删除和导出表的命令。

conflicts:用于查看和解决合并冲突的命令。

安装

Dolt是Golang开发的项目,需要依赖Golang运行时,安装Dolt之前先确保安装了Golang环境。

一键安装

要在基于Linux或Mac的系统上安装,请运行:

sudo bash -c ‘curl -L | bash’

该命令会下载最新版本dolt发布包,并将其安装到/usr/local/bin/,为了可以直接使用需要将其添加的系统路径中,此处我们用ln给/bin添加一个软连接:

ln -s /usr/local/bin/dolt /bin/dolt

Windows版本安装,需要下载仓库下载软件发布的Microsoft Installer(.msi文件)并运行安装即可。

源码安装

clone dolt源码仓库然后一次运行

cd ~/dolt/go

go install ./cmd/dolt

go install ./cmd/git-dolt

go install ./cmd/git-dolt-smudge

上面命令将会安装必需组件到$GOROOT/bin路径,默认为路径为~/go下,应该可以看到类似信息:

ls -ltr $HOME/go/bin/

dolt git-dolt git-dolt-smudge

不管使用哪种方法,为了确认安装成功,在命令行下运行dolt会出帮助信息

dolt

Valid commands for dolt are

确保安装成功。

仿照Git管理,第一步先设置全局信息:姓名和电子邮件:

dolt config –global –add user.email chongchong@ijz.me

dolt config –global –add user.name “Chongchong”

初步使用

创建仓库

假设我们要在Dolt中创建一个数据库,显示各国新冠肺炎确诊数。

mkdir 2019-nCoV

cd 2019-nCoV

初始化目录,并加载一些数据:

dolt init

Successfully initialized dolt data repository.

创建表

dolt sql -q “create table COVID19( country varchar(14), population int,death int, primary key (country) )”

dolt sql -q “desc COVID19”

+————+————-+——+—–+———+——-+

| Field | Type | Null | Key | Default | Extra |

+————+————-+——+—–+———+——-+

| country | VARCHAR(14) | NO | PRI | | |

| population | INT | YES | | | |

| death | INT | YES | | | |

+————+————-+——+—–+———+——-+

现在给这个表插入一些数据:

insert into COVID19 (country, population,death) values

(” USA “, 398785,12893),

(“Spain”, 141942,14045),

(“Italy”,135586,17127),

(“France”,110070,10343),

(“Germany”,107663,2016),

(“China”,82751,3337),

(“Iran”,62589,3872),

(“United”,Kingdom 55949,6171)

查询刚才插入的数据:

dolt sql -q ‘select * from COVID19’

加上where条件

dolt sql -q ‘select * from COVID19 where country=”USA”‘

+———+————+——-+

| country | population | death |

+———+————+——-+

| USA | 398785 | 12893 |

+———+————+——-+

假设满意,请按以下方式创建提交:

dolt add .

dolt commit -m “Add new top10 countryinfo of COVID-19”

dolt status

On branch master

nothing to commit, working tree clean

Ok,这样仓库数据数据提交完成。

dolt也支持通过CSV和PSV文件导入数据:

dolt table import -pk=state COVID19 data.csv

更新数据

如果需要更新表,可以直接通过ipmort文件信息方式:

dolt table import –update-table <table> <csv_file>

或者通过SQL语句:

dolt sql –query ‘INSERT INTO COVID19 VALUES (“Country”, 1000,1)’

Rows inserted: 1

dolt sql –query ‘UPDATE COVID19 SET population=82750 where country =”China”‘

Rows updated: 1

更新后,查询状态就可以,看到有更改信息,显示类似于Git:

dolt status

On branch master

Changes not staged for commit:

(use “dolt add <table>” to update what will be committed)

(use “dolt checkout <table>” to discard changes in working directory)

modified: COVID19

dolt diff

如果信息更新Ok,则可以添加到版本历史

dolt add state_populations

dolt commit -m “Added ‘My State'”

分支工作流程

进行更改时,建议创建一个新分支,该分支将用作更改的工作空间。选择一个简短的分支名称,该名称描述计划要做的工作。同样,这与Git相同:

dolt checkout -b <branch>

进行更改后,像以前一样添加并提交修改后的表。工作完成后,就可以将所有更改恢复回master分支运行中了:

dolt checkout master

dolt merge <branch>

然后,需要添加并提交合并的数据:

dolt add .

dolt commit -m “Merge work from <branch> into master”

添加远程库

Dolt以与Git类似的方式支持远程仓。Dolt也提供在线平台DoltHub,这是Dolt数据库的托管服务。在下文中,我们以DoltHub为例来添加远程仓:

dolt login

通过浏览器窗口,打开DoltHub,创建账号,并创建HTTPS凭据。

创建成功后,会显示如下信息:

Key successfully associated with user: XXX

接下来,要确保在DoltHub创建了远程仓。例如,如果存储库是在名为”org”的组织下创建的,名称为”repo”,则可以这样添加远程库:

dolt remote add origin org/repo

添加后,使用以下命令查看具体信息:

dolt remote -v

应该显示如下内容:

origin doltremoteapi.dolthub/org/repo

如果已经在网络上创建了存储库并添加了一个远程服务器,则应该能够将分支”master”推送到名为” rigin”的远程服务器上,如下所示

dolt push origin master

一旦成功,其他人便可以克隆存储库(假设已授予他们权限)。

dolt clone org/repo

所有操作和Git操作Github也类似

有用的DoltHub数据集

DoltHub仓库提供了有用的数据库可供我们使用,比如:

新冠疫情数据库dolthub/repositories/Liquidata/corona-virus

word-net: dolthub/repositories/Liquidata/word-net

ImageNet:dolthub/repositories/Liquidata/image-net

Google Open Images:dolthub /repositories/Liquidata/open-images

国家/地区的IP地址:dolthub /repositories/Liquidata/ip-to-country

除了DoltHub dolt还支持其他形式的仓库存储形式,比如基于目录,aws和gcs的远程仓库:

文件:可以将目录用作远程目录,就像为其他远程目录一样,可以通过提供目录uri来clone,push和pull。dolt远程添加文件:

///Users/xyz/abs/path/

aws 可以直接使用aws云对象存储。

远程添加aws://dynamo-table:s3-bucket/ database

还可以使用GCS存储桶。创建一个gcs存储桶,使用gcloud auth login命令来设置的凭据。

远程添加gs://gcs-bucket/database

相关文章