# 数据库和数据仓库
# 数据库
数据库(Database)是"按照数据结构来组织、存储和管理数据的仓库"。它以一定方式组织存储的数据,让用户能对其中数据进行增删改查等操作。
数据库(Database)的特点是:
- 相对复杂的表格结构,存储结构相对紧致,少冗余数据。
- 读和写都有优化。相对简单的read/write query,单次作用于相对的少量数据。
数据库大体上分为SQL关系型数据库和NoSQL非关系型数据库。
# 关系型数据库
关系型数据库是把复杂的数据结构归结为简单的二元关系(二维表格),对数据的操作全部建立在一个或多个关系表格上。
这类数据库有MySql,Oracle,Microsoft SQL Server,PostgreSQL,SQLite。
# 非关系型数据库
NoSql(Not Only SQL)数据库在特定的场景下可发挥难以想象的高效率和性能,是对关系型数据库的一个有效补充。它的分类如下:
数据库类型 | 数据库描述 | 代表数据库 |
---|---|---|
键值存储数据库(Key-Value) | 它类似于传统语言中的哈希表,通过key来添加,查询或删除数据库,来获得较高的性能及扩展性。 | Memcached、Redis、Ehcache |
列存储数据库(Column-Oriented) | 一个列族存储经常被一起查询的相关数据,比如人的姓名、年龄、薪资这三个属性中,薪资要单独存储。可根据姓名来索引人的其他信息。常用来应对分布式存储海量数据。 | Cassandra、HBase |
面向文档数据库(Document-Oriented) | 数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML,JSON,JSONB | MongoDB、CouchDB |
图形数据库(Graph-Oriented) | 将数据以图的方式存储,实体会被看作顶点,实体之间关系被看作边 | Neo4J、InfoGrid |
时序数据库(time‑series) | 时序数据库是基于时间的一系列数据,以时间为坐标将数据连成线,揭示趋势,规律,它需要支持数据快速写入。 | InfluxDB、Prometheus、OpenTSDB、TimeScaleDB、kairosdb、CrateDB、Kudu |
搜索引擎存储 | 提供全文搜索,分布式等功能 | Elasticsearch、Solr |
对象存储 | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据 | db4o、Versant |
xml数据库 | 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery、Xpath | Berkeley DB XML、BaseX |
# 搜索引擎存储
搜索引擎数据库流行的有Solr和ElasticSearch,Solr是一个开源项目,基于Lucene,提供分布式索引、分片、副本集、负载均衡和自动故障转移和恢复功能。Elasticsearch也是构建在Lucene之上,在Solr推出几年后才面世,通过REST和schema-free的JSON文档提供一个分布式,多用户能力的全文搜索引擎。Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的,这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。
# 数据仓库
与数据库相近的一个概念是数据仓库(DataWarehouse),它为企业的决策制定提供数据支持,出于分析性报告和决策支持而创建,为需要业务智能的企业提供业务流程改进,监视时间,成本,质量。它的本质是整合多个数据源的历史数据进行细粒度,多维的分析。
数据仓库模型分为五个部分:
- 系统记录域:这部分是主要的数据仓库业务数据存储区,数据模型在这里保证了数据的一致性。
- 内部管理域:这部分主要存储数据仓库用于内部管理的元数据,数据模型在这里能够帮助进行统一的元数据的管理。
- 汇总域:这部分数据来自于系统记录域的汇总,数据模型在这里保证了分析域的主题分析的性能,满足了部分的报表查询。
- 分析域:这部分数据模型主要用于各个业务部分的具体的主题业务分析。这部分数据模型可以单独存储在相应的数据集市中。
- 反馈域:可选项,这部分数据模型主要用于相应前端的反馈数据,数据仓库可以视业务的需要设置这一区域。
数据仓库分为四个层次:
- ODS层:存放原始数据,直接加载原始日志、数据,数据保存原貌不做处理。
- DWD层:结构与粒度原始表保持一致,对ODS层数据进行清洗。
- DWS层:以DWD为基础,进行轻度汇总。
- ADS层:为各种统计报表提供数据。
数据仓库(Datawarehouse)的特点是:
- 数据仓库是面向主题的,它是集成的。它其中的数据是不可修改的。
- 相对简单的(Denormalized)表格结构,存储结构相对松散,多冗余数据。
- 一般只是读优化。相对复杂的read query,单次作用于相对大量的数据(历史数据)。
# 差别
可以从下面几个层面来看它们的差别:
数据库 Database (Oracle, Mysql, PostgreSQL)属于操作性系统,就是联机事务处理OLTP(On-Line Transaction Processing),主要用于事务处理,数据仓库 Datawarehouse (Amazon Redshift, Hive)属于分析性系统,就是联机分析处理OLAP(On-Line Analytical Processing),主要用于数据分析。
操作型处理 分析型处理 细节的 综合或者提炼的 实体-关系(E-R)模型 星型模型或雪花模型 存储瞬间数据 存储历史数据,不包含最近的数据 可更新的 只读、只追加 一次操作一个单元 一次操作一个集合 性能要求高,响应时间短 性能要求宽松 面向事务 面向分析 一次操作数据量小 支持决策需求 数据量小 数据量大 客户订单、库存水平和银行账户查询 客户收益分析、市场细分 数据库是一种具体技术,数据仓库是一种结构体系。比如Mysql和Apache Hive,Hive实际上一个较大的体系结构,它能把数据存放在Mysql等数据库中。
Mysq实战-1 →