T-Sql

TiDB(NewSQL)

2021-06-17  本文已影响0人  紫晶葫芦

1. TiDB介绍

TiDB 是分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。TiBD也是NewSQL的一种。

OLTP:联机的事务处理,特点是在短时间内返回查询结果,对应的是关系型数据库,例如mysql,sqlserver,oracle等,底层使用的innodb引擎,B+ 树等数据结构。

OLAP:联机的分析处理,特点是对历史数据分析,然后产生决策性的影响(大数据分析),对应的是数据库,例如HIVE(数据仓库),Hbase。

关系型数据库(SQL):

缺点:

  1. 不支持在线的数据库扩容,缩容。
  2. 大量数据查询非常慢
  3. 并发能力差(使用集群,分库,分表,mycat 实现但是成本较大)

优点:

  1. 关系型数据库

非关系型数据库(NOSQL):

缺点:

  1. 致命缺点丢失数据
  2. 不能联查

优点:

  1. 性能高
  2. 并发能力强
  3. 支持在线的数据库扩容,缩容

NewSQL:结合了关系型和非关系型数据库的优势可以做到以下

  1. 并发能力高
  2. 支持在线的数据库扩容,缩容
  3. 支持云原生
  4. 可以联查

2. 架构解析

20190225192015447.png

TiDB的搭建

  1. 操作系统


    8.png
  2. 搭建条件

    TiDB 支持部署和运行在 Intel x86-64 架构的 64 位通用硬件服务器平台或者 ARM 架构的硬件服务器平台。对于开发,测试,及生产环境的服务器硬件配置(不包含操作系统 OS 本身的占用)有以下要求和建议:

7.png
  1. 下载文件
#克隆安装脚本,或者直接复制下载好的文件内容(下载所有的脚本到,然后把整个复制到指定的目录下)
git clone https://github.com/pingcap/tidb-docker-compose.git

#执行docker-compose之前先需要清除本机挂载,如果之前安装过
docker volume rm $(docker volume ls -q)
#安装
docker-compose up -d


#设置密码
set password for 'root'@'%' = '123456';

搭建成功可用mysql工具软件连接测试,以后就可以如同mysql一样使用了。

同时可以使用http:IP:3000 查看数据库的状态

4. 数据的一致性

1. 选举

节点是可以自己给自己投票的,启动的时候获得了大多数的票的就会作为leader,当出现投票一致的时候,就会进行重新的选举。

2. 日志复制

从客户端来的数据,先是主节点收到数据,主节点把数据通过raft协议把日志发送到所有的从节点。当超过半数(包括半数)的从节点返回ack 后,主节点认为数据保存落盘 。然后,继续做1.返回给客户端ack 数据收到,当返回客户端成功后,主节点然后通知从节点,把上次的数据改为提交状态(提交状态的数据,才能被查询到)。至于没有给主节点返回ack的从节点,主节点会重复给这些从节点日志复制。

如果,主机点和其他的从节点网络断开,则客户端会写入数据失败,其他的从节点会从新的选举主节点,保证后面的数据能写入成功。经过一段时间旧的主节点从新连接上来后,旧 的主节点会对写入失败的数据做回滚,然后作为新的主节点的从节点,同步新的主节点的数据。

注意:当网络不是很好的时候,已经产生了新的主节点。新的客户端对旧的数据做修改操作后。会造成旧的客户端连接旧的主节点对查出来的数据是旧的。

5. 对接Spark引擎大数据查询

1. Spark介绍

Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎 。现在形成一个高速发展应用广泛的生态系统。

Spark 主要有三个特点 :

首先,高级 API 剥离了对集群本身的关注,Spark 应用开发者可以专注于应用所要做的计算本身。

其次,Spark 很快,支持交互式计算和复杂算法。

最后,Spark 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求。

内存计算下,Spark 比 Hadoop 快100倍。

Spark 提供了80多个高级运算符。

Spark 提供了大量的库,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。

Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器

Hadoop:核心思想是分而治之。其中有三个组件:

  1. hdfs:分部署的储存
  2. mapduce:由map 和duce 组成。
  3. 容器,任务执行容器,方便垃圾回收,管理分配所有节点的资源,也是资源调度器。

以下是hadoop 下的一个节点的结构:


4.png

Hadoop和数据库结构就变成了以下状态:


5.png
hadoop 存在的问题就是性能低:主要原因就是原始数据通过map从新保存到磁盘中,做排序后reduce又从新的从硬盘读取从新放入磁盘。

所以现在开发出了spark在内存中对数据做汇总以提高它的性能:

以下是结构体


6.png

2. Spark的使用

docker exec -it tidb-docker-compose_tispark-master_1 /bin/bash

cd /opt/spark/data/tispark-sample-data
//插入测试数据
mysql --local-infile=1 -h IP -P 4000 -u root -p123456 < dss.ddl

插入数据成功:

可以通过mysql 数据库查看到数据数据库


1.png

使用shark查询数据:

cd /opt/spark/bin
#启动shell 窗口,会加载一些组件
./spark-shell
#导入组件
import org.apache.spark.sql.TiContext
#定义对象
var ti=new TiContext(spark)
#定义参数
ti.tidbMapDatabase("TPCH_001")
spark.sql("select count(*) from lineitem").show

 spark.sql(
      """select
        |   l_returnflag,
        |   l_linestatus,
        |   sum(l_quantity) as sum_qty,
        |   sum(l_extendedprice) as sum_base_price,
        |   sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
        |   sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
        |   avg(l_quantity) as avg_qty,
        |   avg(l_extendedprice) as avg_price,
        |   avg(l_discount) as avg_disc,
        |   count(*) as count_order
        |from
        |   lineitem
        |where
        |   l_shipdate <= date '1998-12-01' - interval '90' day
        |group by
        |   l_returnflag,
        |   l_linestatus
        |order by
        |   l_returnflag,
        |   l_linestatus
      """.stripMargin).show

以下是查询的结果:


3.png

注意:

  1. spark 现在存在的问题吃内存,
  2. 稳定性待测试

6. 处理大数据

为了提升数据的读写性能TiDB对硬盘做了分块,并且分配的磁盘是递增增加:如下图:


2.png

数据写入:当数据写入时,首先写入内存中,同时追加到日志中,当把分配的内存写满后,把数据转移到较小的磁盘中。然后删除日志文件,当较小的磁盘写满后转存到较大的磁盘中,以此类推

数据修改删除:删除的数据会记录版本号,处理还是按照日志追加,同理修改记录也会进入磁盘,LSM树TiDB的底层会做处理。

数据读取:开始先读取内存,如果内存没有就找较小的磁盘,较小的磁盘没有找较大的磁盘,以此类推。为了提升性能,减少对磁盘的查询,增加了布隆过滤器。

上一篇 下一篇

猜你喜欢

热点阅读