偶数社区投稿丨OushuDB学习实践系列(一):开一家超市

偶数社区投稿丨OushuDB学习实践系列(一):开一家超市

大家好,我是镜镜呀,也是一名技术开发人员。本系列内容,也将由技术点出发,从数据库的使用、实践开始,逐步增加对整体的认知,由点及面,真正理解 OushuDB、数据湖仓一体在技术上的变革,以及对行业的影响。 为了更方便理解 OushuDB 以及相关操作,本系列内容中,设计了一个场景——开一家超市

启动环境

最开始,我们还是要先启动整个环境。打开 terminal,并执行。 # 设置OushuDB的环境变量,并执行(执行后没有任何输出返回,是正常的) source /usr/local/oushu/oushudb/oushudb_path.sh # 启动hdfs start-dfs.sh # 启动整个oushuDB集群,和magma oushudb start cluster -a --with_magma # 单独启动magma magma start cluster

开一个超市

你打算开一个超市,但是有很多商品,你需要一个管理商品、进货、交易等的流程。 首先,你想到,需要几张表格,分别记录:
  • 商品表:商品的名称、价格、数量等。
  • 交易订单表:记录卖出了哪些商品
  • .......
多张表组成的系统,我们就称之为数据库系统。
  • 创建一个数据库
# 进入到数据库 psql -d postgres # 创建数据库 (很多输入是大写的,大家可以在键盘上按“CAPS LOCK”键打开大写输入,方便书写,需要小写时再切回来) postgres=# CREATE DATABASE supermarket; CREATE DATABASE # 查看有哪些数据库,我们会看到有了一个supermarket postgres=# \l List of databases Name | Owner | Encoding | Access privileges -------------+---------+----------+------------------- postgres | gpadmin | UTF8 | supermarket | gpadmin | UTF8 | template0 | gpadmin | UTF8 | template1 | gpadmin | UTF8 | (4rows) # 查看的另一种方式:检查系统表pg_database, 查看datname字段(!注意不是dataname) postgres=# select datname from pg_database; datname ------------- template1 template0 postgres supermarket(4rows)开了一家超市,你自然就是这个超市的主人,同样的,当你创建数据库后,你就自动成为了这个新数据库的主人(所有者),以后开不开这家超市,是否删除掉这个数据库,都是你来决定。 现在,我们退出数据库,重新进入 supermarket 库。 # 退出posgres数据库 (在unix类系统中,'\'一般表示执行,q全称是quit,一般表示退出) postgres=# \q [gpadmin@localhost ~]$ # 进入到数据库supermarket [gpadmin@localhost ~]$ psql -d supermarketpsql (8.2.15)Type "help" for help. supermarket=# 由此,可看出 psql -d 命令,后面跟的是数据库的名称

给超市起一个独特的名字

supermarket 这个名字,太大众、普通了。现在我想给我的超市起一个特别的名字,恰好最近正值春节,阖家欢乐之际,我们所求的不过是一家人幸福安康,我们就叫"欢乐超市"吧,英文就翻译为 happymarket 吧! 现在,我们再创建一个名为 happymarket 的数据库:supermarket=# CREATE DATABASE happymarket; CREATE DATABASEsupermarket=# \l List of databases Name | Owner | Encoding | Access privileges -------------+---------+----------+------------------- happymarket | gpadmin | UTF8 | postgres | gpadmin | UTF8 | supermarket | gpadmin | UTF8 | template0 | gpadmin | UTF8 | template1 | gpadmin | UTF8 | (5 rows) 好了,现在欢乐超市的库也建完了。但是,之前的 supermarket 这个库,我们不想要了,需要删除它。我们可以使用 drop 命令。(drop 译为停止、放弃)supermarket=# DROP DATABASE supermarket; ERROR: cannot drop the currently open database我们看到,如果直接删除 supermarket 会报错,提示说“不能废弃当前打开的数据库”。我们现在打开并链接的数据库是 supermarket,所以不能删除。 相信你已经有了解决办法,我们只要切换到别的数据库上,比如新建的 happymarket 上,就可以删除 supermarket 库了。实践一下,果然可行!supermarket=# # 退出数据库 supermarket=# \q # 连接happymarket [gpadmin@localhost ~]$ psql -d happymarketpsql (8.2.15)Type "help" for help. # 删除supermarket,没有报错 happymarket=# DROP DATABASE supermarket; DROP DATABASE # 查看现在有哪些库 happymarket=# \l List of databases Name | Owner | Encoding | Access privileges -------------+---------+----------+------------------- happymarket | gpadmin | UTF8 | postgres | gpadmin | UTF8 | template0 | gpadmin | UTF8 | template1 | gpadmin | UTF8 | (4 rows)

讨论和优化

Nice!现在已经删除原来的 supermarket 了。但是,大家想一想,这样删除是不是比较麻烦,还要切换到另一个库中。回顾一下,我们的整个流程,从产品的角度来考虑下问题,这样会有很多疑惑。 整个流程的逻辑是这样的:
  • 如果要创建数据库,需要先进入的 postgres 库
  • 如果要删除的话,需要先切换到另一库上
带来的问题:
  • 问题 1:创建时,如果没有预先设置好的 postgres 库,要怎么创建呢?
  • 问题 2:既然需要先进入再创建库,那么 postgres 库是哪里来的呢?
  • 问题 3:能不能直接创建,或是删除库?
我们来一个一个的探索! 现在,我们来从实际的角度来考虑问题。 你为什么开超市? 你当时选择开超市,是看到别人开超市赚钱了,有利可图,你才开始做这件事的,并且有了一个比较成熟的市场规范,那么,第一个开超市的人是谁? 我也不知道是哪位前辈祖先,但是我们可以想到,第一个开超市的人一定明白了交换的价值,他开超市成功了,并且摸索出了一套基本的规范,后人根据这样的规范,开了类似的场所、店铺,而后逐渐有了市场、有了行业。 同样地,当我们创建数据库的时候,也是遵循了某个“前辈”摸索出的基本规范,依照这样的规范,搞一个差不多的库。 第一个数据库是如何创建的? 这位“前辈”叫做 initdb 命令,译过来就是初始化数据库的命令。 “前辈”开的超市,叫做“postgres”,所以我们后人每次开超市时,其实就是与前辈的一次时空的对话,与文化的传承。 第一个数据库,由 initdb 命令,在初始化数据存储区的时候,创建的,这个数据库叫做 postgres。因此,要创建第一个用户数据库时,需要先与 postgres 连接。 直接创建、删除数据库 既然有需要,那么产品设计人早已为我们想好了。为了方便,我们可以直接在 shell 中,用 createdb 程序,来创建新数据库。 我们还是以创建 supermarket 数据库为例: # 退出数据库连接,回到shell环境 postgres=# \q [gpadmin@localhost ~]$ # 在shell中,直接使用createdb来创建数据库 [gpadmin@localhost ~]$ createdb supermarket # 连接数据库,查看是否已经创建好 [gpadmin@localhost ~]$ psql -d supermarketpsql (8.2.15)Type "help" for help. supermarket=# \l List of databases Name | Owner | Encoding | Access privileges -------------+---------+----------+------------------- happymarket | gpadmin | UTF8 | postgres | gpadmin | UTF8 | supermarket | gpadmin | UTF8 | template0 | gpadmin | UTF8 | template1 | gpadmin | UTF8 | (5 rows) # 已创建好,没什么问题 # 退出连接 supermarket=# \q # 在shell环境中,直接使用dropdb命令删除数据库 [gpadmin@localhost ~]$ dropdb supermarket # 连接数据库,看看是否已删除 [gpadmin@localhost ~]$ psql -d postgrespsql (8.2.15)Type "help" for help. postgres=# \l List of databases Name | Owner | Encoding | Access privileges -------------+---------+----------+------------------- happymarket | gpadmin | UTF8 | postgres | gpadmin | UTF8 | template0 | gpadmin | UTF8 | template1 | gpadmin | UTF8 | (4 rows) # 已删除没有问题

总结

好了,现在我们已经给超市立了一个牌子,还学会了如何创建、删除数据库,现在我们来总结一下这些命令。

偶数社区投稿丨OushuDB学习实践系列(一):开一家超市