信息时代数据才是最重要的。数据的表现形式也越来越丰富,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 github/liquidata-inc/dolt/releases/latest/download/install.sh | 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 邮箱
dolt config –global –add user.name “用户名”
初步使用
创建仓库
假设我们要在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 | | | |
现在给这个表插入一些数据:
dolt sql -q 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 或者通过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: Changes not staged for commit: (use “dolt add (use “dolt checkout modified: COVID19 dolt diff 如果信息更新Ok,则可以添加到版本历史 dolt add state_populations dolt commit -m “Added My State” 分支工作流程 进行更改时,建议创建一个新分支,该分支将用作更改的工作空间。选择一个简短的分支名称,该名称描述计划要做的工作。同样,这与Git相同: dolt checkout -b 进行更改后,像以前一样添加并提交修改后的表。工作完成后,就可以将所有更改恢复回master分支运行中了: dolt checkout master dolt merge 然后,需要添加并提交合并的数据: dolt commit -m “Merge work from 添加远程库 Dolt以与Git类似的方式支持远程仓。Dolt也提供在线平台DoltHub,本文中,我们以DoltHub为例来添加远程仓: dolt login 通过浏览器窗口,打开DoltHub,创建账号,并创建HTTPS凭据。 创建成功后,会显示如下信息: Key successfully associated with user: XXX 接下来,要确保在DoltHub创建了远程仓。例如,如果存储库是在名为org的组织下创建的,名称为repo,则可以这样添加远程库: dolt remote add origin org/repo 添加后,使用以下命令查看具体信息: dolt remote -v 应该显示如下内容: origin dolt remoteapi.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
” to update what will be committed)” to discard changes in working directory)
原创文章 Dolt——Golang开发的“Git即数据库”实践,版权所有
如若转载,请注明出处:https://www.itxiaozhan.cn/202210710.html