调研报告之OLAP数据库

标签: 大数据 分类: 后台服务 创建时间:2019-12-17 05:44:31 更新时间:2023-10-20 11:23:28

从今天开始接触大数据内容,可能学到的只是一个皮毛,但可以增加知识的广度,拓展自己的眼界,对世界的认识同样也会增加一分。

1.OLTP和OLAP

联机事务处理OLTP(on-line transaction processing) 主要是执行基本日常的事务处理,比如数据库记录的增删查改。比如在银行的一笔交易记录,就是一个典型的事务。
特点:

1.实时性要求高。银行异地汇款,以前要隔天才能到账,而现在是分分钟到账的节奏,说明现在银行的实时处理能力大大增强。
2.数据量不是很大,生产库上的数据量一般不会太大,而且会及时做相应的数据处理与转移。
3.交易一般是确定的,比如银行存取款的金额肯定是确定的,所以OLTP是对确定性的数据进行存取
4.高并发,并且要求满足ACID原则。比如两人同时操作一个银行卡账户,比如大型的购物网站秒杀活动时上万的QPS请求。

联机分析处理OLAP(On-Line Analytical Processing) 是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态的报表系统。
特点:

1.实时性要求不是很高,比如最常见的应用就是天级更新数据,然后出对应的数据报表。
2.数据量大,因为OLAP支持的是动态查询,所以用户也许要通过将很多数据的统计后才能得到想要知道的信息,例如时间序列分析等等,所以处理的数据量很大;
3.OLAP系统的重点是通过数据提供决策支持,所以查询一般都是动态,自定义的。所以在OLAP中,维度的概念特别重要。一般会将用户所有关心的维度数据,存入对应数据平台。

OLAP场景的关键特征:

大多数是读请求
数据总是以相当大的批(> 1000 rows)进行写入
不修改已添加的数据
每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列
宽表,即每个表包含着大量的列
较少的查询(通常每台服务器每秒数百个查询或更少)
对于简单查询,允许延迟大约50毫秒
列中的数据相对较小: 数字和短字符串(例如,每个URL 60个字节)
处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行)
事务不是必须的
对数据一致性要求低
每一个查询除了一个大表外都很小
查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中

2.何为列势存储?

列式数据库是以列相关存储架构进行数据存储的数据库,主要适合与批量数据处理和即席查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合与小批量的数据处理,常用于联机事务型数据处理。传统的行式数据库,是按照行存储的,维护大量的索引和物化视图无论是在时间(处理)还是空间(存储)方面成本都很高。而列式数据库恰恰相反,列式数据库的数据是按照列存储,每一列单独存放,数据即是索引。只访问查询涉及的列,大大降低了系统I/O,每一列由一个线来处理,而且由于数据类型一致,数据特征相似,极大方便压缩。
优点:

数据压缩比高,正因为同一类型的列存储在一起。
简化数据建模的复杂性。
由于查询需要读取的blocks少,速度更快。
BI的优秀选择。

Sybase IQ,ParAccel, Sand/DNA Analytics和 Vertica。Sybase IQ:知道IQ跟其它的关系型数据库相比,它的主要特征是什么?包括查询快、数据压缩比高、Load快,但是插入更新慢,不太适合数据老是变化,它是按列存储的。这时候你就知道它适做DSS(决策支持系统),数据集市,数据仓库,它不适合OLTP。适合OLAP。

3.业界常来搭建数据仓库的数据库

在数据仓库领域的收费列数据库

1、惠普公司的Vertica
2、oracle公司Oracle Warehouse Builder的
3、sybase公司的Sybase IQ/SAPIQ
4、mysql公司出的Infobright。
5、Greenplum公司的Greenplum

互联网公司自主研发的

1、华为的Carbondata。
2、百度研发给内部使用的palo。
3、腾讯Hermes
4、Druid:广告分析,互联网广告系统监控、度量和网络监控。开源免费。
5、俄罗斯的yandex公司为自己内部统计需要研发的clickhouse

一些产品介绍表格:

数据库名称 所属公司 是否商业收费 优点 缺点 说明 列式存储(非行存储)
Oracle Warehouse Builder(OWB) oracle 商业收费 未知 未知 未知 未知
Sybase IQ/SAPIQ SAP 商业收费 SAP公司收购数据库公司SYbase的产品。Sybase IQ拥有列式存储、网格架构、专利的数据压缩、先进的查询优化器。电信和金融行业的客户较多
Vertica 惠普公司 商业收费 未知 未知
hbase Apache的Hadoop项目的子项目 开源免费 很适合统计多维度数据。目前看资料,乐视的视频云涉及到视频多维度统计从redis、mysql迁到hbase,响应需求更快。Facebook用在很多业务中。 1、搭建和维护HBase是很繁琐的,引入很多学习成本,遇到问题还要排查。2、Php操作hbase,需要安装一facebook的服务thrift,这个服务安装没成功。一个中间服务,不够简单。 hbase与google的表格存储数据库bigtable是同一种东西。列存储。hbase是模仿bigtable产生的。
hive 开源免费 1、查询速度比较慢。2、基于MapReduce来处理数据。需要理解mapreduce,会写这种。目前来看不好上手 否,只是一中架构。
palo 百度 开源免费 用在百度统计以及百度其他应用。 网上的使用资料比较少。要使用直接使用百度云提供的付费服务。百度云 目前提供了付费服务 列存储
clickhouse 俄罗斯的Yandex 开源免费 查询速度快,SQL语句操作。 1、文档齐全。有官网。支持php、.net等各类语言,官网直接提供了各类语言的库。2、速度很快。经过Yandex公司自身的实践考验。俄罗斯的nginx也是久经考验。 此公司类似于中国的 百度和百度统计业务。为应对自身内部需要而开发
Infobright MySql公司 开源免费,有商业版和社区版 1、社区版不支持更改数据。只能载入数据。2、社区版只能支持10多个并发查询 3、世面上用的人少。 列存储
Greenplum Greenplum 商业收费 基于关系数据库PostgreSQL做存储 列存储
Druid 免费 列存储
参考文章:
1.数据仓库一些整理(列式数据库) (这篇文章非常全面,值得观赏)
2.腾讯实时分析平台Hermes介绍

百度数据仓库Palo

百度数据仓库Palo是百度智能云上提供的PB级别的MPP数据仓库服务,以较低的成本提供在大数据集上的高性能分析和报表查询功能。百度数据仓库Palo不是面向OLTP的数据库产品,而是一款面向OLAP的数据库产品,和百度数据仓库Palo功能定位比较相似的产品包括Greenplum、Vertica、Exadata等商业数据仓库系统和Amazon RedShift、Google BigQuery等云服务,大家可以参考以上产品来理解百度数据仓库Palo。

Apache CarbonData

Apache CarbonData is an indexed columnar data format for fast analytics on big data platform, e.g. Apache Hadoop, Apache Spark, etc.(Apache CarbonData是一种索引的列式数据格式,用于在大数据平台上进行快速分析,例如Apache Hadoop,Apache Spark等)

ClickHouse

ClickHouse is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP)。(ClickHouse是面向列的数据库管理系统(DBMS),用于查询的在线分析处理(OLAP))。上一张图:

支持的语言也很多:

总结起来:

  • 优点:
    1、免费却不输于商业数据仓库。网上别人公开的测验数据看,性能不比惠普公司等提供的商业列式存储数据库差。与百度自己研发列数据库palo,也进行过性能对比,各有千秋,不输。
    2、好上手,维护成本低。对php支持良好。界面管理工具也全。
    3、扩展方便。支持分布式和数据复制。
    4、经过俄罗斯最大的搜索引擎公司yandex,内部场景运行后开源出来的。由于是2016年6月才开源出来,故国内公司使用不多,毕竟已经使用了商业数据仓库的,迁移要权衡。

  • 缺点:
    1、不支持Transaction:想快就别想Transaction (事务)
    2、聚合结果必须小于一台机器的内存大小:不是大问题
    3、缺少完整的Update/Delete操作
    4、支持有限操作系统
    5、开源社区刚刚启动,主要是俄语为主

参考文章:
1.彪悍开源的分析数据库-ClickHouse (这篇文章对ClickHouse有一个比较全面的分析,包括优缺点等)
2.ClickHouse Documentation

Vertica数据库

首先开始的就是列式存储数据库:Vertica:Vertica是一款基于列存储的MPP (massively parallel processing)架构的数据库。它可以支持存放多至PB(Petabyte)级别的结构化数据。Vertica是由关系数据库大师Michael Stonebraker(2014 年图灵奖获得者)所创建,于2011年被惠普收购并成为其核心大数据平台软件。
优势:

(1) 列式存储和计算
(2) “横向扩展式”大规模并行处理 (MPP)
(3) 实时分析
(4) 数据库内部分析库
(5) 完整的关系数据库和SQL 标准支持:支持SQL-92/SQL-99/SQL-2003 标准,提供ODBC、JDBC、ADO.NET 接口规范驱动,完全兼容传统关系数据库的开发、使用和管理习惯,可以轻松与现有的ETL 和报表工具集成
(6) 可扩展的数据库内部分析框架
(7) 原生支持Hadoop
(8) 自动实现高可用性
(9) 自动优化和性能管理

其他

类似于第一篇文章,今天我又找到了其他的一些适合OLAP的高性能数据库。

性能方面我没有实际的测过,也不好说明上面的数据对不对。我从列式存储开始,好像越走越宽了路,即使不用列式存储,也可以使用高性能的大规模的数据OLAP数据查询与分析。通过分析与查询,我了解了大数据的三个关键技术:预计算、大规模并行处理和列式存储。

面向列的DBMS的示例:Vertica,Paraccel(Actian Matrix和Amazon Redshift),Sybase IQ,Exasol,Infobright,InfiniDB,MonetDB(VectorWise和Actian Vector),LucidDB,SAP HANA,Google Dremel,Google PowerDrill,Druid和kdb +。

参考文章:
1.基于SnappyData构建实时数据仓库
2.Apache Kylin
3.Apache Kylin 概述
4.从携程性能测试case中重新认识clickhouse (这篇文章中我顺着SnappyData,我认识了kylin,还有其他的一些支持OLAP的数据库)
5.Apache Kylin 概述

4.高性能数据库方案

既然列式存储适合在OLAP(联机事务分析)的场景下使用,那么对于OLTP(联机事务处理),如何提高相应的性能呢?

(1) 拆表:大表拆小表(垂直拆,水平拆;分表,分区partition,分片sharding),可以在应用层实现,也可以在数据库层面实现一部分;提高系统性能。
(2) 分库:把表放到不同的数据库,,这也是分布式数据库的基础;提高系统性能。
(3) 分布式:不同的数据库放到不同的服务器;提高系统性能。
(4) 集群:使用数据库复制等技术组建集群,实现读写分离、备份等;提高系统性能、可用性。
(5) 缓存:对常用的数据进行缓存。提高系统性能。
(6) 备份:主从库,快照,热备,异地备份等;提高系统可用性。

总结:
针对数据分析应用场景,就选择clickhouse这种读取多插入少的OLAP数据分析技术,如果是为了提过数据库的插入更新等性能,还是选择传统的数据库,然后采用分库、分表以及分布式等技术和手段来提高系统的性能。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。