数据库中间件

  • Sharding-Sphere
  • Mycat

 

传统的应用连接数据库时采用直接对数据进行访问的架构模式,随着目前数据量不断的增大会遇以问题:
单个表数据量太大
单个库数据量太大
单台数据量服务器压力很大
读写速度遇到瓶颈
第一种解决方式:向上扩展(scale up) ,简单来说就是增加硬件性能。这种方式只能暂时解决问题。
第二种解决方式:水平扩展。增加机器,把数据库放到不同服务器上,在应用到数据库之间加proxy进行路由。

中间件与读写分离的区别

读写分离是中间件可以提供的一种功能,而中间件最主要的功能是分库分表。
按照中间件分库分表算法,比如将获取id=1的SQL将发送到DB1节点,由DB1这个MySQL节点负责解析和获取数据,并通过中间件返回给客户端。在读写分离结构中并没有分库分表规则,只能在众多读节点中load balance随机进行分发,它要求各个节点都要存放一份完整的数据。

https://www.jianshu.com/p/f94b10c43d55

分布式与集群的区别

提升效率的点不同:分布式是以缩短单个任务的执行时间来提升效率,集群则是通过提高单位时间内执行的任务数来提升效率。
分布式是指将不同的业务分布在不同的地方。集群指的是将几台服务器集中在一起实现同一业务。
分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。
分布式组织比较松散,每一个节点都完成不同的业务,一个节点垮了这个业务就不可访问了。集群有组织性,一台服务器垮了其它的服务器可以顶上来。
访问的人多了可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,响应服务器根据负载均衡规则选择服务器完成。

迁移数据库文件后,有的表报错误

mysql table is marked as crashed and last (automatic?) repair failed
解决办法:

#停止mysql服务
service mysqld stop
#进入数据目录,修复
myisamchk -r -v -f 表名
service mysql start

时序数据库

influxdb

measurement和tags共同称为key,如果在tag value中的空格,应以“\”加上空格表示。
tag中的值必须是string类型,其实是起到索引的作用。

field中的值可以为Integer、float、Boolean、string类型。若为Integer类型,则值后必须加“i”,否则该值为float类型,Boolean类型的值的表示方式有很多,直接写成:t、T、true、TRUE, 和 f、F、false、FALSE。
插入数据时,时间戳部分如果被省略,则默认将当前时间的时间戳插入数据库,否则按照用户输入的时间戳插入。

influxDB属于时序数据库,没有提供修改和删除数据的方法。但是删除可以通过InfluxDB的数据保存策略(Retention Policies)来实现。
测试发现,重写同一条记录可覆盖上一条记录,可以做到修改这条记录。
另外分析,从系统整体上来看,updateTime并没有使用到,因为实时数据并不再从数据库中查询获得,而是使用内存中的最新采集数据。查询统计时使用的时间是createTime。
如果不记录updateTime,并且如果最新采集数据一直没有特征变化,最终数据库中存储的可能是较早期采集插入的数据。
如果不记录updateTime,并且如果要存储最后一次采集时间,可额外记录。一般情况下,当前时间即是最新一条记录的修改时间,下一条数据的创建时间减去采集周期是上一条数据的最后修改时间。

wget https://dl.influxdata.com/influxdb/releases/influxdb-1.5.2.x86_64.rpm
sudo yum localinstall influxdb-1.5.2.x86_64.rpm
service influxdb start

#命令行连接
influx -precision rfc3339
drop database mydb1
CREATE DATABASE mydb1
SHOW DATABASES 
USE mydb1
SHOW MEASUREMENTS
drop measurement measurement1

#增加数据采用insert的方式,表名与数据之间用逗号(,)分隔,tag和field之间用 空格分隔,多个tag或者多个field之间用逗号(,)分隔。
INSERT measurement1,field1=serverA,field1=us_west field3=0.64

select * from "measurement1"
select * from measurement1 limit 1
select * from "measurement1" where "value">0.9  

#series表示表里面的数据,series主要通过tags排列组合算出来。
show series from measurement1

InfluxDB简明手册
https://legacy.gitbook.com/book/xtutu/influxdb-handbook/details

使用influxdb和grafana快速开发监控系统
http://0x0010.com/2017/07/monitor-system-based-on-influxdb-grafana/
https://github.com/miwurster/spring-data-influxdb
https://docs.influxdata.com/influxdb/v1.5/guides/writing_data/
https://docs.influxdata.com/influxdb/v1.5/tools/api_client_libraries/
一篇文章告诉你,为什么时序数据库会成为新趋势?
http://www.tuicool.com/articles/r6R3aaY
http://flacro.me/influxdb/
Grafana的安装(CentOS )- 千月带你美化监控数据 grafana(1)
https://blog.csdn.net/syshzbtt/article/details/71574204
### NOT starting grafana-server by default on bootup, please execute
sudo /sbin/chkconfig –add grafana-server
### In order to start grafana-server, execute
sudo service grafana-server start

InfluxDB系列学习教程目录
https://www.linuxdaxue.com/influxdb-study-series-manual.html
使用 InfluxDB 有感
https://toutiao.io/posts/viqzdg/preview
https://www.jianshu.com/p/d71646c08317
https://www.jianshu.com/p/a1344ca86e9b