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

news2024/12/29 1:49:32

大家好,我是镜镜呀,也是一名技术开发人员。本系列内容,也将由技术点出发,从数据库的使用、实践开始,逐步增加对整体的认知,由点及面,真正理解 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 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 
-------------+---------+----------+-------------------
 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 | 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 supermarket
psql (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 postgres
psql (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)
 
# 已删除没有问题

总结

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/439785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

@Configuration 和 @Component 注解的区别

一句话概括就是 Configuration 中所有带 Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例。 理解:调用Configuration类中的Bean注解的方法,返回的是同一个示例; 而调用Component类中的Bean注解的方法&#x…

【社区图书馆】携程架构与实践图书

发这篇博文主要是想学习一下携程的架构。携程出了一本《携程架构实践》,无奈现在还没开源。看京东价大概109元人民币。如果看到次博文的网友能发我一本《携程架构实践》pdf。不胜感谢。或者实体书籍也行。其实我不怎么需要实体书籍,因为技术的东西很快会…

使用 IDEA 远程 Debug 调试

背景 有时候我们需要进行远程的debug,本文研究如何进行远程debug,以及使用 IDEA 远程debug的过程中的细节。看完可以解决你的一些疑惑。 配置 远程debug的服务,以springboot微服务为例。首先,启动springboot需要加上特定的参数。…

小白下载以后打不开怎么解决

我们重装系统时,大家会遇到各种各样的问题,现在有一些想用小白一键重装系统工具来帮助自己完成系统重装时,却发现我们打不开这个工具,现在不知道其原因有哪些,那么大家今天就来告诉小伙伴们小白一键重装官网下载以后打…

计算机概述

计算机: 硬件: CPU(Central Processing Unit,中央处理器)靠大脑思考,电脑靠CPU来运算、控制。硬盘(Hard Disk Drive) 计算机最主要的存储设备,容量大,断电数…

创新,阿里首发微服务实施手册我粉了,原来微服务还可以这样玩

微服务 相信大家在网上会看到很多帖子把分布式跟微服务放在一起讨论。确实,微服务就是一种分布式架构的设计方法。但是,在微服务概念还没有出现之前,分布式这个概念并不能引起人们的强烈关注,如果说自己擅长分布式架构设计&#…

TCP,TCP 连接建立,TCP 连接断开,Socket 编程

目录 TCP基本认识 TCP 头格式有哪些? 为什么需要 TCP 协议? TCP 工作在哪一层? 什么是 TCP ? 什么是 TCP 连接? #如何唯一确定一个 TCP 连接呢? UDP 和 TCP 有什么区别呢?分别的应用场景是…

【教学类-34-02】拼图(英文大写字母)3*2格子(中班主题《个别化拼图》偏艺术-美术)

作品展示: 背景需求 3*4块运动拼图对幼儿有点难(不熟悉图案内容、拼图数量多) 1、选择幼儿相对熟悉的的字母(26个,基本满足28人) 2、拼图数量:2*36块 3、做的小一点,一张2份&am…

【软件测试面试】全网最全,自动化测试面试题总结大全(付答案)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 面试题1&#xff…

企企通项目入选《2023爱分析·供应链和采购数字化最佳实践案例》

近日,“2023爱分析供应链和采购数字化最佳实践案例”评选活动落下帷幕,主要围绕实践领先性、案例创新性、应用成熟度、价值创造四个维度对候选实践案例进行评选。企企通凭借自身丰富的采购供应链解决方案经验,以“迈金科技采购数字化管理平台…

美洽迈入“生成式AI时代”,开启智能客服新纪元!

生成式 AI,当前科技领域最热门的话题之一。 它指的是一类人工智能模型,可以根据输入的数据,自动生成新的数据或者输出一些有用的信息,例如:文本、图像、音频、视频等等。 在实际应用中,生成式AI可以帮助人…

“COMSOL电化学系列,锂离子电池仿真,燃料电池仿真

背景: 电化学仿真技术通过对电池微观行为进行研究,明晰电池内部多现象机理,并将其数值化,通过数值方法实现对物理特征联合计算,建立完整的电池模型。COMSOL Multiphysics具有强大的多物理场全耦合仿真分析功能、高效的…

Django框架介绍及搭建开发环境

介绍 是一个开放源代码的web应用框架,由python编写。 与常规的MVC架构不同,为MTV架构。 MTV Model(模型):负责业务对象和数据库的关系映射(ORM)。 Template(视图):负责把页面展示给用户(htm…

Win32API之实现远程线程注入(九)

什么是注入 注入是一种在不知情或未经许可的情况下向其他进程中注入模块并试图执行它们的技术 常见的注入方式有:远程线程注入、APC注入、消息钩子注入、注册表注入、导入表注入、输入法注入等等 什么是远程线程注入 远程线程注入是一种技术,可以将一…

前端vue之根据内容生成二维码

1.实现这功能需要借助第三方插件,首先下载安装插件: 我在终端直接下载 npm install vue-qr --save2.在需要的.vue文件中引入并注册组件 import VueQr from vue-qr; export default {components: {VueQr,},3.在需要用的位置使用该二维码标签 <vue-qr :logo-src"logoS…

自动控制原理模拟卷6

自动控制原理模拟题六 Question1 已知控制系统的信号流图如下图所示: 求控制系统传递函数 C ( s ) / R ( s ) C(s)/R(s) C(s)

[mars3d] 学习

今天整体说下mars3d&#xff0c;集成问题之后在说&#xff0c;先说下概念性的东西&#xff1b; 一、设置地球的参数 下载他们的示例&#xff0c;如果不是特别的要求&#xff0c;可以直接使用他们的 confign 进行加载&#xff1b; 如果有什么特别的设置的&#xff0c;可以通过…

Chapter6-可靠性优先的使用场景

6.1 顺序消息 顺序消息是指消息的消费顺序和产生顺序相同&#xff0c;在有些业务逻辑下&#xff0c;必须保证顺序 。 比如订单的生成 、付款、发货&#xff0c;这 3 个消息必须按顺序处理才行。顺序消息分为全局顺序消息和部分顺序消息&#xff0c;全局顺序消息指某个 Topic 下…

centos7.6部署ELK集群(一)之elasticsearch7.7.0集群部署

32.3. 部署es7.7.0 32.3.1. 下载es&#xff08;各节点都做&#xff09; wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.0-linux-x86_64.tar.gz 32.3.2. 解压至安装目录&#xff08;各节点都做&#xff09; tar -xvf elasticsearch-7.7.0-li…

你的宝典,软件测试项目实战,金融项目测试点详全(超详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试要点 软件测试…