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

小玄儿
• 阅读 356

哈喽,大家好,我是镜镜呀,本身也是一名技术开发人员。本系列内容,也将由技术点出发,从数据库的使用、实践开始,逐步增加对整体的认知,由点及面,真正理解偶数 DB、数据湖仓一体在技术上的变革,以及对行业的影响。

为了更方便理解 OushuDB,以及相关操作,在这本系列内容中,设计了一个场景。但最开始,我们还是要先启动整个环境。

启动环境
打开 terminal,并执行

设置OushuDB的环境变量,并执行(执行后没有任何输出返回,是正常的)

source /usr/local/hawq/greenplum_path.sh

启动hdfs

start-dfs.sh

启动整个oushuDB集群,和magma

hawq 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 
postgresgpadminUTF8
supermarketgpadminUTF8
template0gpadminUTF8
template1gpadminUTF8

(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 supermarket
psql (8.2.15)
Type "help" for help.

supermarket=#

由此,可看出 psql -d 命令,后面跟的是数据库的名称

给超市起一个独特的名字
supermarket 这个名字,太大众化、普通化了。现在我想给我的超市,起一个特别的名字,恰好最近正值春节,阖家欢乐之际,我们所求的不过是一家人幸福安康,我们就叫"欢乐超市"吧!英文就翻译为 happymarket 吧!

现在,我们再创建一个名为 happymarket 的数据库:

supermarket=# CREATE DATABASE happymarket;
CREATE DATABASE
supermarket=# \l

              List of databases
Name     |  Owner  | Encoding | Access privileges 
happymarketgpadminUTF8
postgresgpadminUTF8
supermarketgpadminUTF8
template0gpadminUTF8
template1gpadminUTF8

(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 happymarket
psql (8.2.15)
Type "help" for help.

删除supermarket,没有报错

happymarket=# DROP DATABASE supermarket;
DROP DATABASE

查看现在有哪些库

happymarket=# \l

              List of databases
Name     |  Owner  | Encoding | Access privileges 
happymarketgpadminUTF8
postgresgpadminUTF8
template0gpadminUTF8
template1gpadminUTF8

(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 supermarket
psql (8.2.15)
Type "help" for help.

supermarket=# \l

              List of databases
Name     |  Owner  | Encoding | Access privileges 
happymarketgpadminUTF8
postgresgpadminUTF8
supermarketgpadminUTF8
template0gpadminUTF8
template1gpadminUTF8

(5 rows)

已创建好,没什么问题

退出连接

supermarket=# \q

在shell环境中,直接使用dropdb命令删除数据库

[gpadmin@localhost ~]$ dropdb supermarket

连接数据库,看看是否已删除

[gpadmin@localhost ~]$ psql -d postgres
psql (8.2.15)
Type "help" for help.

postgres=# \l

              List of databases
Name     |  Owner  | Encoding | Access privileges 
happymarketgpadminUTF8
postgresgpadminUTF8
template0gpadminUTF8
template1gpadminUTF8

(4 rows)

已删除没有问题

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

更多内容关注 OushuDB 小课堂

点赞
收藏
评论区
推荐文章
捉虫大师 捉虫大师
3年前
大厂偏爱的Agent技术究竟是个啥
搜索关注微信公众号"捉虫大师",后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。hello大家好,我是小楼,今天给大家分享一个关于Agent技术的话题,也是后端启示录的第3篇文章。通过本文你可以了解到如下内容:什么是Agent技术为了解释什么是Agent技术,我在网上搜了一圈,但没有找到想要的结果。反倒是搜到了不少JavaAgent技术,
Stella981 Stella981
3年前
Android开发之漫漫长途 Ⅲ——Activity的显示之Window和View(2)
_该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索》以及《深入理解Android卷Ⅰ,Ⅱ,Ⅲ》中的相关知识,另外也借鉴了其他的优质博客,在此向各位大神表示感谢,膜拜!!!另外,本系列文章知识可能需要有一定Android开发基础和项目经验的同学才能
Stella981 Stella981
3年前
Spring 子项目及介绍
1.SpringDataSpringFramework中的数据访问模块对JDBC及ORM提供了很好的支持,随着NoSQL和BigData的兴起,出现了越来越多的新技术,比如非关系型数据库、MapReduce框架,SpringData正是为了让Spring开发者能更方便地使用这些新技术而诞生的“大”项目——它由一系列小的项目组成,分别为不同
Wesley13 Wesley13
3年前
Java NIO 系列教程
JavaNIO系列教程博客分类:javaJavaNIO(NewIO)是从Java1.4版本开始引入的一个新的IOAPI,可以替代标准的JavaIOAPI。本系列教程将有助于你学习和理解JavaNIO。感谢并发编程网(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%
Wesley13 Wesley13
3年前
OLAP数仓入门:基础篇
文章作者:温正湖网易易数内容来源:数据库内核@知乎专栏导读:近七年在网易杭研一直从事数据库相关的开发工作,主要是MySQL和MongoDB这两种数据库,去年开始涉及图数据库Neo4J。上述几种,都可认为是OLTP类数据处理,由于工作需要,需要调研学习OLAP技术和相关系统,本文开始逐步进行第一轮总结,很多东西还只是片面理解,权当做个笔记。
Wesley13 Wesley13
3年前
01,起步,jfinal项目,简单客房管理系统
    其实从大老早开始,1.1的时候,我就关注jfinal了,那时候是啵啵关注我的,我就去看了,哈哈,后来,啵啵取消了关注咱,55.应为人太懒,而且工作原因等,一直研究较少,停留在浅显的地方。上次做的东西再去看,感觉理解不了了,所以现在开个系列,写个博文吧,哈哈,大家一起学习哈,错误请指正。使用技术,自然jfinalbeetlmysqltomc
linbojue linbojue
3星期前
Java进阶实战项目:代码讲解与架构实践
Treasure是一个涵盖单体、微服务、DDD等架构实践的Java技术生态项目。它的理念是兴趣、学习目的和技术积累,逐步完善迭代。📚主要内容:学习成长过程中的技术点工作中积累的心得面试中模拟的业务场景及解决方案常见、通用业务的解决方案合理应用设计模式进行
深度学习 深度学习
2星期前
双指针法解决力扣922题:按奇偶排序数组II的完整指南
一、问题理解题目要求将一个重新,使得:1.所有偶数位于偶数位置(索引0,2,4...)1.所有奇数位于奇数索引位置(索引1,3,5...)1.不要求数字本身的排序,只需满足奇偶位置正确二、解法思路采用,分别维护两个:even指针:负责扫描偶数索引位置odd
h2database BTree 设计实现与查询优化思考 | 京东云技术团队
本文理论结合实践,通过BTree索引的设计和实现,更好的理解数据库索引相关的知识点以及优化原理。
liam liam
1年前
API 设计:基础知识与最佳实践指南
在这篇深入探讨中,我们将从基础开始,逐步介绍API设计,并探讨定义卓越API的最佳实践。作为一名开发者,你可能已经熟悉了许多这些概念,但我将提供详细解释,以加深你的理解。API设计:电子商务示例让我们考虑一个像这样的电子商务平台的API,如果你不熟悉,Sh
linbojue linbojue
3星期前
Java进阶实战项目:代码讲解与架构实践
Treasure是一个涵盖单体、微服务、DDD等架构实践的Java技术生态项目。它的理念是兴趣、学习目的和技术积累,逐步完善迭代。📚主要内容:学习成长过程中的技术点工作中积累的心得面试中模拟的业务场景及解决方案常见、通用业务的解决方案合理应用设计模式进行