数据处理分类
-
OLTP
- 联机事务处理OLTP 是传统关系型数据库的主要应用用来执行一些基本的、日常的事务处理比如数据库记录的增、删、改、查等等
-
OLAP
- 场景:主要用于分布式数据库,存储在不同地方的海量数据,数据价值随着其体量不断地累积也一直增加,获取其中知识进行数据分析,可以帮助企业执行正确的决策
- 联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有共享多维信息的快速分析的特征(FASMI)
- F是快速性,指系统能在数秒内对用户的多数分析要求做出反应
- A是可分析性,指用户无需编程就可以定义新的专门计算,将其作为分析的一部 分,并以用户所希望的方式给出报告
- M是多维性,指提供对数据分析的多维视图和分析
- I是信息性,指能及时获得信息,并且管理大容量信息
行式存储和列式存储
-
行式存储
- 概念:传统的关系型数据库,如 Oracle、DB2、MySQL、SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的, 一行中的数据在存储介质中以连续存储形式存在
- 适用场景
- 适合随机的增删改查操作
- 需要在行中选取所有属性的查询操作
- 需要频繁插入或更新的操作,其操作与索引和行的大小更为相关
- 缺点:读取少量字段时,查询效率低,采用索引和表分区提高效率
-
列式存储
- 概念:列式存储(Column-based)是相对于行式存储来说的,新兴的 Hbase、HP Vertica、EMC Greenplum 等分布式数据库均采用列式存储。在基于列式存储的数据库中, 数据是按照列为基础逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在
- 对于数据仓库和分布式数据库来说,汇总数据进行操作一般围绕同一列属性的数据进行
- 适用场景
- 查询过程中,可针对各列的运算并发执行(SMP),最后在内存中聚合完整记录集,最大可能降低查询响应时间
- 可在数据列中高效查找数据,无需维护索引(任何列都能作为索引),查询过程中能够尽量减少无关IO,避免全表扫描
- 因为各列独立存储,且数据类型已知,可以针对该列的数据类型、数据量大小等因素动态选择压缩算法,以提高物理存储利用率;如果某一行的某一列没有数据,那在列存储时,就可以不存储该列的值,这将比行式存储更节省空间
- 缺点
- 不适合做含有删除和更新的实时操作
- 适用于列属性较少的数据库场景
数据仓库(OLAP)
- 概念:为满足新需求设计的一种新数据库,而这个数据库是需容纳更多的数据,更加庞大的数据集。提供所有类型数据支持,主要是用于数据挖掘和数据分析
- 特点
- 面向主题:比如购物是一个主题,那么购物里面包含用户、订单、支付、物流等数据综合,对这些数据要进行归类并分析,分析这个对象数据的一个完整性、一致性的描述,能完整、统一的划分对象所设计的各项数据
- 数据集成:数据仓库的数据是从原有分散的数据库中的数据抽取而来的。存入时需要数据清理和整理(同名异义、异名同义)
- 不可更新:设计的数据主要是数据查询,一般情况下不做修改,这些数据反映的是一段较长时间内历史数据的内容,有一块修改了影响的是整个历史数据的过程数据。不可更新是针对应用来说,从数据的进入到删除的整个生命周期中,数据仓库的数据是永远不变的
- 随时间不断变化:随着时间变化不断有新的数据进来,不断删除久的数据内容
QE的存储
-
druid
- 概念:是一个在大数据场景下的解决方案,是需要在复杂的海量数据下进行交互式实时数据展现的 BI/OLAP 工具
- 特点:
- 处理的数据量规模较大
- 可以进行数据的实时查询展示
- 它的查询模式是交互式的,这也说明其查询并发能力有限
- 重要技术
- 预聚合
- 列式存储
- 字典编码
- 位图索引
- 预聚合算是 Druid 的一个非常大的亮点,通过预聚合可以减少数据的存储以及避免查询时很多不必要的计算。由于 OLAP 的分析场景大多只关心某个列或者某几个列的指标计算,因此数据非常适合列式存储。在列式存储的基础之上,再加上字段编码,能够有效的提升数据的压缩率,然后位图索引让很多查询最终直接转化成计算机层面的位计算,提升查询效率
-
ClickHouse
-
presto
- 概念:Presto是由 Facebook 推出的一个基于Java开发的开源分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。Presto本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询
- Presto 支持从多种数据源获取数据来进行运算分析,一条SQL查询可以将多个数据源的数据进行合并分析。如如下SQL:a可以来源于MySQL,b可以来源于Hive select a.* ,b.* from a join b on(a.id = b.id)
- 特点
- 多数据源、混合计算支持:支持众多常见的数据源,并且可以进行混合计算分析
- 大数据:完全的内存计算,支持的数据量完全取决于集群内存大小。他不像SparkSQL可以配置把溢出的数据持久化到磁盘,Presto是完完全全的内存计算
- 高性能:低延迟高并发的内存计算引擎,相比Hive(无论MR、Tez、Spark执行引擎)、Impala 执行效率要高很多。根据Facebook和京东的测试报告,至少提升10倍以上
- 支持ANSI SQL:这点不像Hive、SparkSQL都是以HQL为基础(方言),Presto是标准的SQL。用户可以使用标准SQL进行数据查询和分析计算
- 扩展性:有众多 SPI 扩展点支持,开发人员可编写UDF、UDTF。甚至可以实现自定义的Connector,实现索引下推,借助外置的索引能力,实现特殊场景下的 MPP
- 流水线:Presto 是基于PipeLine进行设计,在大量数据计算过程中,终端用户(Driver)无需等到所有数据计算完成才能看到结果。一旦开始计算就可立即产生一部分结果返回,后续的计算结果会以多个Page返回给终端用户(Driver)
-
es
-
Lucene(库)是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎
-
概念:Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎
-
专有名词
- 索引:存放数据的地方,可以理解为mysql中的一个数据库
- 类型:用来定义数据结构,可以认为是mysql中的一张表
- 文档:就是最终的数据,可以认为就是一条记录
-
特点
- es将对搜索引擎的操作都封装成了restful的api,通过http请求就能对其进行操作
- 考虑了海量数据,实现了分布式,是一个可以存储海量数据的分布式搜索引擎
- Elasticsearch 也是会对数据进行切分,同时每一个分片会保存多个副本,其原因和 HDFS 是一样的,都是为了保证分布式环境下的高可用
- master-slave架构,节点是对等的,节点间会通过自己的一些规则选取集群的 Master,Master 会负责集群状态信息的改变,并同步给其他节点
- 只有建立索引和类型需要经过 Master,数据的写入有一个简单的 Routing 规则,可以 Route 到集群中的任意节点,所以数据写入压力是分散在整个集群的
-
一个数据如何存储到es中的
-
比如一首诗,有诗题、作者、朝代、字数、诗内容
-
先建立一个名为poems的索引(数据库)
-
创建一个名叫Poem的类型(表),通过Mapping定义每个字段类型
//索引 poems //类型 "poem":{ "properties":{ "title":{ "type":"keyword", }, "author":{ "type":"keyword", }, "words":{ "type":"integer" }, "content":{ "type":"text", } } } //文档 { "title":"静夜思", "author":"李白", "words":"20", "content":"床前明月光,疑是地上霜。举头望明月,低头思故乡。" }
-
-
keyword和text都是字符串
- keyword:不会分别,直接根据字符串内容建立反向索引
- text:会先分词,然后根据分词内容建立反向索引
-