使用SQL的好处是当我们的需求改变的时候,不用改程序,只用改SQL语句即可。但单体sql引擎无法满足大数据的实时计算,这里介绍几种可行的方案。
数据库集群
如果系统数据库已经采用了分片集群,那么可以采用分而治之的方案,从各个集群中先统计出部分数据,再归总。
优点
- 不用新建系统
- 速度快
缺点
- 如果数据库不是集群,则要新建系统
- 无法分而治之的情况不能适用
ElasticSearch SQL
ES 最近公布了新的 SQL 功能,给开发者带来了福音。三个方案里首选的就是这个,因为搭建方便
优点
- 搭建简单
缺点
现在没有修改的功能,下面是支持的语句
命令 | 说明 |
---|---|
DESC table | 用来描述索引的字段属性 |
SHOW COLUMNS | 功能同上,只是别名 |
SHOW FUNCTIONS | 列出支持的函数列表,例如count(), sum(),支持通配符过滤 |
SELECT .. FROM table_name WHERE .. GROUP BY .. HAVING .. ORDER BY .. LIMIT .. | 用来执行查询的命令 |
现在试试看,先建一条数据
1 | POST twitter/doc/ |
然后查询
1 | POST /_xpack/sql?format=txt |
因为 SQL 特性是 xpack 的免费功能,所以是在 _xpack 这个路径下面,我们只需要把 SQL 语句传给 query 字段就行了,注意最后面不要加上 ; 结尾,注意是不要!
下面是比较常用的函数
name | type |
---|---|
AVG | AGGREGATE |
COUNT | AGGREGATE |
MAX | AGGREGATE |
MIN | AGGREGATE |
SUM | AGGREGATE |
STDDEV_POP | AGGREGATE |
VAR_POP | AGGREGATE |
PERCENTILE | AGGREGATE |
PERCENTILE_RANK | AGGREGATE |
SUM_OF_SQUARES | AGGREGATE |
SKEWNESS | AGGREGATE |
KURTOSIS | AGGREGATE |
DAY_OF_MONTH | SCALAR |
DAY | SCALAR |
DOM | SCALAR |
DAY_OF_WEEK | SCALAR |
DOW | SCALAR |
DAY_OF_YEAR | SCALAR |
DOY | SCALAR |
HOUR_OF_DAY | SCALAR |
HOUR | SCALAR |
MINUTE_OF_DAY | SCALAR |
MINUTE_OF_HOUR | SCALAR |
MINUTE | SCALAR |
SECOND_OF_MINUTE | SCALAR |
SECOND | SCALAR |
MONTH_OF_YEAR | SCALAR |
MONTH | SCALAR |
YEAR | SCALAR |
WEEK_OF_YEAR | SCALAR |
WEEK | SCALAR |
ABS | SCALAR |
ACOS | SCALAR |
ASIN | SCALAR |
ATAN | SCALAR |
ATAN2 | SCALAR |
CBRT | SCALAR |
CEIL | SCALAR |
CEILING | SCALAR |
COS | SCALAR |
COSH | SCALAR |
COT | SCALAR |
DEGREES | SCALAR |
E | SCALAR |
EXP | SCALAR |
EXPM1 | SCALAR |
FLOOR | SCALAR |
LOG | SCALAR |
LOG10 | SCALAR |
MOD | SCALAR |
PI | SCALAR |
POWER | SCALAR |
RADIANS | SCALAR |
RANDOM | SCALAR |
RAND | SCALAR |
ROUND | SCALAR |
SIGN | SCALAR |
SIGNUM | SCALAR |
SIN | SCALAR |
SINH | SCALAR |
SQRT | SCALAR |
TAN | SCALAR |
SCORE | SCORE |
Hadoop + Hive(非实时)
Hadoop 由于是 MapReduce 方案,无法保证实时,但是 Hadoop 生态非常大,可能有实时方案,姑且介绍一下。
Hadoop + Hive 方案是最早的方案,Hadoop 负责存储和分发数据,Hive 负责解析SQL和处理数据。其中 Hive 支持作为 thrift 服务,能够很好的融入到微服务系统中。
优点
- 节点数和数据量没有限制
- 在SQL无法满足的情况下可以自己写程序弥补
缺点
- 搭建困难
- 不是实时
这里有一份大数据学习笔记 介绍框架的搭建方案。