当前位置: 代码迷 >> 综合 >> 《ClickHouse 实战:企业级大数据分析》
  详细解决方案

《ClickHouse 实战:企业级大数据分析》

热度:10   发布时间:2024-01-13 18:27:29.0

计算机科学领域的所有问题,都可以通过添加一层中间层来解决。通过在用户和计算机中间添加一层逻辑层(概念模型层),于是就有了“数据库的三级模式”:数据库在三个级别 (层次)上进行 抽象 ,使用户能够 逻辑地、抽象地处理数据 ,而不必关心 数据在计算机中的物理表示和存储 。

数据库简介

当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。

数据库是一个按数据结构来存储和管理数据的计算机软件系统。数据库的概念实际包括两层意思:

(1)数据库是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。

(2)数据库是数据管理的新方法和技术,它能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。

数据库发展历史

数据库的演变

数据建模和数据库一起发展,它们的历史可以追溯到 1960 年代。

数据库演变发生在五个“浪潮”中:

1.第一波由网络、分层、倒排列表和(在 1990 年代)面向对象的 DBMS 组成;它大约发生在 1960 年至 1999 年之间。

2.关系浪潮在 1990 年左右推出了所有 SQL 产品(以及一些非 SQL),并在 2008 年左右开始失去用户。

3.决策支持浪潮在 1990 年左右引入了在线分析处理 (OLAP) 和专门的 DBMS,并且今天仍然有效。

4.图浪潮始于 1999 年万维网联盟的语义网络堆栈,2008 年左右出现了属性图

5.NoSQL 浪潮包括大数据等等;它始于2008年。

1973 年:查尔斯·巴赫曼 (Charles Bachman) 的“作为导航员的程序员”

1981 年:E.F. (Ted) Codd : “关系数据库:生产力的实用基础”

2001 年:Ole-Johan Dahl 和 Kristen Nygaard 提出了 面向对象编程 出现的基本思想

2014 年:Michael Stonebraker 的 “The Land Sharkx are on the Squawk Box” 。

1973: Charles Bachman with “The Programmer as Navigator”

1981: E. F. (Ted) Codd with “Relational Database: A Practical Foundation for Productivity”

2001: Ole-Johan Dahl and Kristen Nygaard for ideas fundamental to the emergence of object-oriented programming

2014: Michael Stonebraker with “The Land Sharkx are on the Squawk Box.”

在数据库的发展历史上,数据库先后经历了:

1.层次数据库

2.网状数据库

3.关系数据库

等阶段。随着云计算的发展和大数据时代的到来,关系型数据库越来越无法满足需要,这主要是由于,越来越多的半关系型和非关系型数据,需要用数据库进行存储管理。以此同时,分布式技术等新技术的出现也对数据库的技术提出了新的要求。

于是越来越多的非关系型数据库就开始出现,这类数据库与传统的关系型数据库在设计和数据结构有了很大的不同, 它们更强调数据库数据的高并发读写和存储大数据,这类数据库一般被称为NoSQL(Not only SQL)数据库。而传统的关系型数据库在一些传统领域依然保持了强大的生命力。

关系数据库

关系型数据库,存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。常见的关系型数据库有Mysql,SqlServer等。在轻量或者小型的应用中,使用不同的关系型数据库对系统的性能影响不大,但是在构建大型应用时,则需要根据应用的业务需求和性能需求,选择合适的关系型数据库。

标准SQL语句

虽然关系型数据库有很多,但是大多数都遵循SQL(结构化查询语言,Structured Query Language)标准。常见的操作有查询,新增,更新,删除,求和,排序等。

查询语句:SELECT param FROM table WHERE condition 该语句可以理解为从 table 中查询出满足 condition 条件的字段 param。

新增语句:INSERT INTO table (param1,param2,param3) VALUES (value1,value2,value3) 该语句可以理解为向table中的param1,param2,param3字段中分别插入value1,value2,value3。

更新语句:UPDATE table SET param=new_value WHERE condition 该语句可以理解为将满足condition条件的字段param更新为 new_value 值。

删除语句:DELETE FROM table WHERE condition 该语句可以理解为将满足condition条件的数据全部删除。

去重查询:SELECT DISTINCT param FROM table WHERE condition 该语句可以理解为从表table中查询出满足条件condition的字段param,但是param中重复的值只能出现一次。

排序查询:SELECT param FROM table WHERE condition ORDER BY param1该语句可以理解为从表table 中查询出满足condition条件的param,并且要按照param1升序的顺序进行排序。

总体来说, 数据库的SELECT,INSERT,UPDATE,DELETE对应了我们常用的增删改查四种操作。

关系型数据库对于结构化数据的处理更合适,如学生成绩、地址等,这样的数据一般情况下需要使用结构化的查询,例如join,这样的情况下,关系型数据库就会比NoSQL数据库性能更优,而且精确度更高。由于结构化数据的规模不算太大,数据规模的增长通常也是可预期的,所以针对结构化数据使用关系型数据库更好。关系型数据库十分注意数据操作的事务性、一致性,如果对这方面的要求关系型数据库无疑可以很好的满足。

非关系型数据库(NoSQL)

随着近些年技术方向的不断拓展,大量的NoSql数据库如MongoDB、Redis、Memcache出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的目的被设计。

NoSQL 指分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。

NoSQL数据库技术与CAP理论、一致性哈希算法有密切关系。

所谓CAP理论,简单来说就是一个分布式系统不可能满足可用性、一致性与分区容错性这三个要求,一次性满足两种要求是该系统的上限。

而一致性哈希算法则指的是NoSQL数据库在应用过程中,为满足工作需求而在通常情况下产生的一种数据算法,该算法能有效解决工作方面的诸多问题但也存在弊端,即工作完成质量会随着节点的变化而产生波动,当节点过多时,相关工作结果就无法那么准确。这一问题使整个系统的工作效率受到影响,导致整个数据库系统的数据乱码与出错率大大提高,甚至会出现数据节点的内容迁移,产生错误的代码信息。

但尽管如此,NoSQL数据库技术还是具有非常明显的应用优势,如数据库结构相对简单,在大数据量下的读写性能好;能满足随时存储自定义数据格式需求,非常适用于大数据处理工作。

NoSQL数据库适合 追求速度和可扩展性、业务多变 的应用场景。

对于 非结构化数据 的处理更合适,如文章、评论。这些数据通常只用于模糊处理(全文搜索、机器学习),并不需要像结构化数据一样,进行精确查询。而且这类数据的数据规模往往是海量的,数据规模的增长往往也是不可能预期的 —— 而NoSQL数据库的扩展能力几乎也是无限的,所以NoSQL数据库可以很好的满足这一类数据的存储。NoSQL数据库利用key-value可以大量的获取大量的非结构化数据,并且数据的获取效率很高,但用它查询结构化数据效果就比较差。

目前NoSQL数据库仍然没有一个统一的标准,它现在有四种大的分类:

(1)键值对存储(key-value):代表软件Redis,它的优点能够进行数据的快速查询,而缺点是需要存储数据之间的关系。

(2)列存储:代表软件Hbase,它的优点是对数据能快速查询,数据存储的扩展性强。而缺点是数据库的功能有局限性。ClickHouse 也是列存储。

(3)文档数据库存储:代表软件MongoDB,它的优点是对数据结构要求不特别的严格。而缺点是查询性的性能不好,同时缺少一种统一查询语言。

(4)图形数据库存储:代表软件InfoGrid,它的优点可以方便的利用图结构相关算法进行计算。而缺点是要想得到结果必须进行整个图的计算,而且遇到不适合的数据模型时,图形数据库很难使用。

数据库管理系统:Database Management System

数据库管理系统(DBMS,Database Management System)是操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。

SQL 数据库管理软件

MySQL:最流行的开源数据库,它是基于 Web 的应用程序的领先解决方案,因为它支持 SQL 作为其数据库语言并包含与 SQL 查询相关的视图,从而可以查看数据库的特定部分.

Oracle RDBMS:领先的全球关系数据库管理系统,它实现了面向对象的特性,例如用户定义的类型、继承和多态。

PostgreSQL:对象关系数据库系统,可在所有主要操作系统上运行,并允许需要关系数据库的内部或商业 Web 开发。它包括一个关系系统目录,该目录支持每个数据库的多个模式。

MS SQL:Microsoft 开发的关系数据库管理系统,可根据其他软件应用程序的要求存储和检索数据。

MariaDB:由原始 MySQL 开发人员制作的流行数据库服务器,可将数据转换为各种应用程序中的结构化信息。MariaDB 具有快速、可扩展和强大的存储引擎、插件和其他工具组合,旨在提供 SQL 接口来访问数据。

SQLite:广泛使用的 C 语言库,它实现了 SQL 数据库引擎,内置于所有手机和大多数计算机中。

DATAPINE:帮助用户探索、可视化和共享数据的商业智能软件。它有助于从多个现有数据库、外部应用程序和 Excel 数据创建数据库。

DbVisualizer:适用于所有主要数据库的数据库管理和分析工具。借助拖放功能,它可以促进数据库的开发、分析和管理。

RazorSQL:适用于 Windows macOS、Mac OS X、Linux 和 Solaris 的 SQL 编辑器、SQL 查询工具、数据库查询工具和数据库管理工具,使用户能够浏览数据库对象并管理数据库。

NoSQL 数据库管理软件

Redis:开源的内存数据结构存储,用作数据库、缓存和消息代理,支持字符串、哈希、列表、集合、位图、地理空间索引、流等数据结构。

MongoDB:文档数据库,将数据存储在灵活的类似 JSON 的文档中,以映射对象并简化数据管理。它的核心是一个具有高可用性、水平扩展和地理分布的分布式数据库。

GraphQL:用于 API 的开源查询和操作语言,还可用作运行时以使用现有数据填充查询。

Apache CouchDB:开源数据库软件,侧重于面向文档的 NoSQL 的易用性和可扩展架构。它使用 JSON 存储数据,使用 JavaScript 作为查询语言,使用 HTTP 作为 API。

Neo4j:用于任务关键型企业应用程序的图形数据库管理平台。它被认为是最流行的图形事务数据库之一,具有本机存储和处理功能。

内存数据库管理系统

Apache Ignite:开源分布式数据库、缓存和处理平台,可跨节点集群存储和计算大量数据。

Memcached:分布式内存缓存系统,用于加速动态数据库驱动的网站,将数据和对象缓存在 RAM 中。

基于云的数据管理系统

Amazon Relational Database:使用户能够在云中设置、操作和扩展关系数据库的 Web 服务。

Microsoft Azure SQL 数据库:支持关系数据、JSON、空间和 XML 等结构的关系数据库即服务。

Rackspace 云:云计算产品和服务的集合,例如 Web 应用程序托管、平台即服务、云存储、虚拟专用服务器、负载平衡器、数据库、备份、监控等。

SAP Cloud 平台:开放式平台即服务,提供独特的内存数据库和业务应用程序服务,为数字企业提供支持。

数据库管理的挑战

数据库管理中一些最显着的挑战是:

维护 DBMS 解决方案的硬件和软件的高成本。

DBMS 很复杂,因此需要培训和专门的内部经验资源。

由于数据库管理系统提供集中式解决方案,任何故障或数据损坏都可能影响整个数据库。

如果多个用户同时访问同一个程序,则存在数据丢失的风险。

在 DBMS 故障期间,可能会因忽视维护系统的最佳功能而招致重大损失。

如果数据库存储大量数据,性能可能会受到影响。

小结:数据不会消失。在数据驱动的世界中,企业需要有效处理和管理数据:能够从数据存储、数据组织、数据检索、数据分析等全方位管理数据。DBMS 使企业能够对数据进行排序、过滤、发现、定位、学习和更新,以从客户那里获取关键信息,并分析其他关键业务活动并在决策中实施这些知识。

DBMS系统的7大功能

  1. 数据定义:DBMS提供数据定义语言DDL(Data Definition Language),供用户定义数据库的三级模式结构、两级映像以及完整性约束和保密限制等约束。DDL主要用于建立、修改数据库的库结构。DDL所描述的库结构仅仅给出了数据库的框架,数据库的框架信息被存放在数据字典(Data Dictionary)中。
  2. 数据操作:DBMS提供数据操作语言DML(Data Manipulation Language),供用户实现对数据的追加、删除、更新、查询等操作。
  3. 数据库的运行管理:数据库的运行管理功能是DBMS的运行控制、管理功能,包括多用户环境下的并发控制、安全性检查和存取限制控制、完整性检查和执行、运行日志的组织管理、事务的管理和自动恢复,即保证事务的原子性。这些功能保证了数据库系统的正常运行。
  4. 数据组织、存储与管理:DBMS要分类组织、存储和管理各种数据,包括数据字典、用户数据、存取路径等,需确定以何种文件结构和存取方式在存储级上组织这些数据,如何实现数据之间的联系。数据组织和存储的基本目标是提高存储空间利用率,选择合适的存取方法提高存取效率。
  5. 数据库保护:数据库中的数据是信息社会的战略资源,所以数据的保护至关重要。DBMS对数据库的保护通过4个方面来实现:数据库的恢复、数据库的并发控制、数据库的完整性控制、数据库安全性控制。DBMS的其他保护功能还有系统缓冲区的管理以及数据存储的某些自适应调节机制等。
  6. 数据库维护:这一部分包括数据库的数据载入、转换、转储、数据库的重组合重构以及性能监控等功能,这些功能分别由各个使用程序来完成。</
  相关解决方案