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

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

哈喽,大家好,我是镜镜呀,本身也是一名技术开发人员。本系列内容,也将由技术点出发,从数据库的使用、实践开始,逐步增加对整体的认知,由点及面,真正理解偶数 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 | Accessprivileges

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 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 | Accessprivileges

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 happymarket

psql (8.2.15)

Type "help" for help.


删除supermarket,没有报错


happymarket=# DROP DATABASE supermarket;

DROP DATABASE


查看现在有哪些库

happymarket=# \l

             List of databases

Name     |  Owner  | Encoding | Accessprivileges

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 supermarket

psql (8.2.15)

Type "help" for help.

supermarket=# \l

             List of databases

Name     |  Owner  | Encoding | Accessprivileges

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 postgres

psql (8.2.15)

Type "help" for help.

postgres=# \l

             List of databases

Name     |  Owner  | Encoding | Accessprivileges

happymarket gpadmin UTF8
postgres gpadmin UTF8
template0 gpadmin UTF8
template1 gpadmin UTF8

(4 rows)


已删除没有问题


总结

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

更多内容关注 OushuDB 小课堂

目录
相关文章
|
存储 缓存 分布式计算
Spark任务OOM问题如何解决?
大家好,我是V哥。在实际业务中,Spark任务常因数据量过大、资源分配不合理或代码瓶颈导致OOM(Out of Memory)。本文详细分析了各种业务场景下的OOM原因,并提供了优化方案,包括调整Executor内存和CPU资源、优化内存管理策略、数据切分及减少宽依赖等。通过综合运用这些方法,可有效解决Spark任务中的OOM问题。关注威哥爱编程,让编码更顺畅!
624 3
|
消息中间件 存储 Kafka
实时计算 Flink版产品使用问题之通过flink同步kafka数据进到doris,decimal数值类型的在kafka是正常显示数值,但是同步到doris表之后数据就变成了整数,该如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
11月前
|
数据库 数据安全/隐私保护 Python
使用wxpython开发跨平台桌面应用,设计系统的登录界面
【11月更文挑战第12天】本文介绍了使用wxPython开发的简单跨平台桌面应用登录界面的示例代码。主要包括导入wxPython模块,创建登录界面类`LoginFrame`,定义界面布局与事件处理,以及启动应用程序的步骤。示例中实现了用户名和密码输入框及登录按钮的基本功能。
222 1
|
Shell Docker 容器
|
4月前
|
消息中间件 SQL 关系型数据库
Flink CDC + Kafka 加速业务实时化
Flink CDC 是一种支持流批一体的分布式数据集成工具,通过 YAML 配置实现数据传输过程中的路由与转换操作。它已从单一数据源的 CDC 数据流发展为完整的数据同步解决方案,支持 MySQL、Kafka 等多种数据源和目标端(如 Delta Lake、Iceberg)。其核心功能包括多样化数据输入链路、Schema Evolution、Transform 和 Routing 模块,以及丰富的监控指标。相比传统 SQL 和 DataStream 作业,Flink CDC 提供更灵活的 Schema 变更控制和原始 binlog 同步能力。
|
12月前
|
存储 缓存 监控
怎么更好地设计一个优秀的SaaS系统
设计一个优秀的SaaS系统,需要从架构、性能、安全性、租户隔离、扩展性等多方面进行深思熟虑。根据业务需求选择合适的多租户架构,保证数据隔离的同时提高系统性能。
751 1
|
9月前
|
存储 NoSQL 关系型数据库
|
10月前
|
SQL XML Java
mybatis实现动态sql
MyBatis的动态SQL功能为开发人员提供了强大的工具来应对复杂的查询需求。通过使用 `<if>`、`<choose>`、`<foreach>`等标签,可以根据不同的条件动态生成SQL语句,从而提高代码的灵活性和可维护性。本文详细介绍了动态SQL的基本用法和实际应用示例,希望对您在实际项目中使用MyBatis有所帮助。
519 11
|
智能硬件
Wi-Fi 与蓝牙:差异解析
【8月更文挑战第24天】
2603 0
|
存储 NoSQL 数据管理
如何借助Redis巧妙的管理用户签到?——Bitmap篇
Redis位操作用于高效存储分析,如用户签到。通过位操作,每个用户签到只需1位,节省空间。使用`setbit`设置签到状态,`getbit`查询,`bitcount`统计签到天数。适用于用户特征标记、系统功能开关和在线状态追踪。高效率、低空间占用,适合大数据场景。
240 0