【项目】全栈开发医疗小程序
文章目录
第1章 课程介绍
1.5 搭建HBase+Phoenix大数据平台
平时我们开发程序用的最多的是MySQL数据库,但是MySQL数据库有一个绕不过去的坎:单表数据量超过2000
万,CRUD的性能会急速下降。
所以我们要安排DBA或者自动化脚本,定期把半年或者一年的数据,迁移到归档数据库中,这样就可以起到缩表的目的。如果开发的是普通的MIS系统,业务数据没有那么多,一个MySQL不用做定期归档也能支撑下来。但是类似于电商平台的项目,每天都会产生大量业务数据,一两个月就能累积几千万条数据。这种情况下,要么频繁的做数据归档,要么选择可以容纳数百TB而不需要归档的大数据平台。这里我选择了后者,既可以降低开发难度,又能减少请DBA的运维成本,何乐而不为呢。
1.5.1 大数据平台的技术选择
1 HBase技术
HBase是一个分布式,版本化,面向列的开源数据库,构建在Apache Hadoop和Apache ZooKeeper之上。
HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server_上搭建起大规模结构化存储集群。
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,HBase基于列的而不是基于行的模式。
HBase的特点
- 海量数据存储,HBase中的表可以容纳上百亿行 x 上百万列的数据。
- 列式存储,HBase中的数据是基于列进行存储的,能够动态的增加和删除列。
- 准卖时查询,HBase在海量的数据量下能够接近准实时的查询(百毫秒以内)
- 多版本,HBaser中每一列的数据都有多个版本。
- 高可靠性,HBase中的数据存储于HDFS中且依赖于Zookeeper进行Master和RegionServer的协调管理。
HBase虽然支持表结构,但是操作起来并不方便。例如下面是个学生表,里面包含了若干的字段。
示例:Student数据表
如果我们给学生表添加新的记录,就需要执行下面的命令:
put 'Student','0001','StuInfo:Name','Tom Green',1
想要获取数据的时候,我们执行get命令就可以了。
get 'Student','0001'
对于我们平时习惯SQL语句的人来说,上面的命令如果简单还行,要是叠加上复杂的条件和函数,那么阅读性就非
常差,所以我们要引入Phoenix技术。
scan 'mytest:test01',FILTER=>"RowFilter(=,'substring:202006')",LIMIT=>1
count 'mytest:test01',FILTER=>"RowFilter(=,'substring:202004')",INTERVAL=>10000
2 Phoenix技术
Phoenix是给HBase添加了一个语法表示层,允许我们用SQL语句读写HBase中的数据,可以做联机事务处理,拥
有低延迟的特性,这就方便多了。
Phoenix:会把SQL编译成一系列的Hbasel的scan操作,然后把scan结果生成标准的JDBC结果集,处理千万级行的数据也只用毫秒或秒级就搞定。而且Phoenix还支持MyBatis框架,正好可以和我们的项目整合到一起。
1.5.2 部署HBase与Phoenix
1 导入镜像文件
首先我们在课程共享的资源中找到phoenix.tar.gz镜像文件,然后把这个文件上传到CentOS系统中,执行命令,把镜像文件导入Docker之中。
命令:docker load < phoenix.tar.gz
执行命令
记得启动docker 先
查看现有镜像
2 创建容器
因为镜像中已经包含和HBase和Phoenix,所以我们只需要创建出容器即可。
由于HBase需要使用的内存较大,这里我没有规定具体的内存大小,容器会自动使用空闲的内存。容器中数据目录是/tmp/hbase-root/hbase/data
,我把这个目录映射到宿主机的/root/hbase/data
目录。
docker run -it -d -p 2181:2181 -p 8765:8765 -p 15165:15165 \
-p 16000:16000 -p 16010:16010 -p 16020:16020 \
-v /root/hbase/data:/tmp/hbase-root/hbase/data \
--name phoenix \
boostport/hbase-phoenix-all-in-one:2.0-5.0
当前正在运行的容器
3 开放端口
笔者这里直接把防火墙关了
4 初始化Phoenix
运行命令,进入到Phoenix容器中,然后执行命令设置HBASE_CONF_DIR
环境变量。
docker exec -it phoenix bash
export HBASE_CONF_DIR=/opt/hbase/conf/
接下来我们要连接Phoenix的命令行客户端。虽然IDEA也内置了Phoenix客户端,但是Bug挺多的,用着并不方
便,所以我建议大家使用Phoenix自带的命令行客户端更好一些。而且我们要执行的SQL语句也并不多,命令行客
户端已经足够用了。
/opt/phoenix-server/bin/sqlline.py localhost
第一次连接要多等一下
出来了,这样就连上了
1.5.3 创建逻辑库和数据表
1 创建逻辑库
为了存储数据,我们需要像操作MySQL一样,先创建逻辑库,然后定义数据表。在Phoenix的命令行客户端我们先来执行创建逻辑库的命令。
CREATE SCHEMA hospital;
USE hospital;
2 创建数据表与导入数据
在本课程的git上面有数据库脚本,SQL文件,你把这个SQL文件中的语句复制粘贴到Phoenix的命令行中执行即可。
一股脑儿全部贴过去就行了
1350 行
等他执行完毕【创建索引比较耗时】
OK, 完事儿了,退出
1.5.4 配置JDBC连接信息
这里要导入项目了
这里老师用了api 那个做演示
复制工程到自己的目录
用IDEA 导入打开
使用我们自己的maven 配置
挺新的,2.7.2 版本的SpringBoot
等待项目构建完成
注意用的JDK 版本,是我们前面装的15
构建完成
这里要改成我们的服务器(虚拟机IP)
还有另一个Java 项目,现在打开这个是微信小程序的接口后台,还有个web 端的接口后台
同样也用IDEA 导入打开
同样用我们本地的maven 配置
同样的改上面那个地方就行了
这个项目的springboot 版本还要高两个点
OK,就这样。