MySQL - 多版本控制 MVCC 机制初探
生猛干货带你搞定MySQL实战,轻松对应海量业务处理及高并发需求,从容应对大场面试MVCC (Multi-Version Concurrency Control)原理MySQL InnoDB 存储引擎,实现的是基于多版本的并发控制协议——MVCC,而不是基于锁的并发控制。MVCC 最大的好处是读不加锁,读写不冲突。在读多写少的 OLTP(On-Line Transaction Processing)应用中,读写不冲突是非常重要的,极大的提高了系统的并发性能。快照读与当前读在 MVCC 并发控制中,读操作可以分为两类: 快照读(Snapshot Read)与当前读 (Current Read)。快照读:读取的是记录的可见版本(有可能是历史版本),不用加锁。当前读:读取的是记录的最新版本,并且当前读返回的记录,都会加锁,保证其他事务不会再并发修改这条记录。MVCC 只在 Read Commited 和 Repeatable Read 两种隔离级别下工作如何区分快照读和当前读呢? 可以简单的理解为:快照读:简单的 select 操作,属于快照读,不需要加锁。当前读:特殊的读操作,插入/更新/删除操作,属于当前读,需要加锁。MVCC 多版本实现为了更直观地理解 MVCC 的实现原理,这里举一个“事务对某行记录更新的过程”的案例来讲解 MVCC 中多版本的实现。假设 F1~F6 是表中字段的名字,1~6 是其对应的数据。后面三个隐含字段分别对应该行的隐含ID、事务号和回滚指针,如下图所示隐含 ID(DB_ROW_ID),6 个字节,当由 InnoDB 自动产生聚集索引时,聚集索引包括这个 DB_ROW_ID 的值事务号(DB_TRX_ID),6 个字节,标记了最新更新这条行记录的 Transaction ID,每处理一个事务,其值自动 +1回滚指针(DB_ROLL_PT),7 个字节,指向当前记录项的 Rollback Segment 的 Undo log记录,通过这个指针才能查找之前版本的数据【更新过程】首先,假如这条数据是刚 INSERT 的,可以认为 ID 为 1,其他两个字段为空。然后,当事务 1 更改该行的数据值时,会进行如下操作,如下图所示用排他锁锁定该行;记录 Redo log;把该行修改前的值复制到 Undo log,即图中下面的行;修改当前行的值,填写事务编号,使回滚指针指向 Undo log 中修改前的行接下来,与事务 1 相同,此时 Undo log 中有两行记录,并且通过回滚指针连在一起。因此,如果 Undo log 一直不删除,则会通过当前记录的回滚指针回溯到该行创建时的初始内容,所幸的是在 InnoDB 中存在 purge 线程,它会查询那些比现在最老的活动事务还早的 Undo log,并删除它们,从而保证 Undo log 文件不会无限增长,如下图所示总结MVCC机制的实现就是通过read-view机制与undo版本链比对机制,使得不同的事务会根据数据版本链对比规则读取同一条数据在版本链上的不同版本数据。搞定MySQLhttps://artisan.blog.csdn.net/article/details/107920199?spm=1001.2014.3001.5502
【韧性工程】所有开发人员都应该知道的韧性软件策略
失败是不可避免的。然而,正确的软件设计和开发选择可以帮助最大限度地减少其影响、隔离问题并加快恢复时间。?许多架构师努力设计具有避免灾难性故障的能力的应用程序系统。不幸的是,在现实世界中,导致崩溃的错误和过载是不可避免的。为了正确处理此类故障,开发团队必须为自己配备正确的软件弹性实践。在追求设计风格(例如基于微服务的架构)时,这一点尤为重要,在这种架构中,故障可能会蔓延到分布式组件并导致广泛的中断。各种软件弹性技术和机制可以帮助团队响应错误、启动恢复过程并在发生故障时保持一致的应用程序性能。让我们来看看架构师可以实施的四种策略来解决错误、最大限度地减少故障的影响并持续维护弹性软件架构。创建死信队列个人通信可能因多种原因而陷入困境,例如不可用的收件人、格式不正确的请求和数据丢失。这在事件驱动架构中尤其成问题,其中请求通常被放入消息队列以等待处理,而请求服务继续进行下一个操作。因此,未处理的消息会迅速堵塞这些队列。死信队列引入了一种机制,专注于处理这些流浪消息,以防止它们使通信渠道混乱,并不必要地吸走保持它们流通所需的资源。开发团队可以设置死信队列来识别滞留消息并隔离故障。这使架构师能够检查特定错误,并维护有助于指导未来设计选择的详细历史文档。一旦这些恶意消息被认为是过时的,就可以随意从队列中删除它们。或者,可以将它们重新提交以恢复操作或复制错误以进行调试。使用功能切换进行修改软件弹性的另一个重要因素与开发团队的功能更新发布周期的方法有关。与其停止添加功能和修改应用程序功能的操作,组织可以使用功能切换方法在推出和更新期间保持应用程序正常运行。功能切换使开发人员能够增量修改应用程序,同时保持现有生产级代码不变。金丝雀发布和 A/B 测试等技术使开发人员能够在有限数量的实例中推出更新的代码,同时将原始代码保留在生产环境中。使用功能切换方法,团队可以通过监视新版本实例并使用类似切换机制的回滚来战略性地配置版本,以防修改导致损坏。在某些情况下,如果系统检测到某些错误或性能不一致,团队可能能够自动触发这些回滚切换。?基本弹性设计模式为了维护弹性软件,开发团队使用特定的设计模式,专注于包含故障和提供紧急对策。许多模式提供了这些类型的恢复机制,并阻止错误从一个分布式组件不受控制地传播到另一个分布式组件。这里有些例子:舱壁(Bulkhead)。此模式隔离子系统并配置单个模块以在出现故障时停止与其他组件的通信,从而降低问题传播的风险。背压(Backpressure)。背压模式自动推回超过预设流量吞吐量容量限制的工作负载请求,保护敏感系统免受过载。断路器(Circuit breaker)。基于隔板和背压模式,断路器提供了一种机制,可以自动切断与有问题的组件的连接。它将定期重试连接以查看错误是否已解决。批量到流(Batch-to-stream.)。该模式旨在管理批处理吞吐量,修改批处理工作负载并将其转换为简化的 OLTP 事务。优雅的退化(Graceful degradation)。这种设计模式本质上为应用程序的所有主要组件安装了一个回退机制。虽然这主要是为了帮助为更新提供回滚,但它也可以在突然失败的情况下派上用场。?促进组件之间的松散耦合传统的单体应用程序意味着紧密耦合架构中的刚性依赖关系。结果,一个软件组件几乎肯定会影响另一个。或者,在微服务等分布式系统中,架构师可以通过解耦软件组件来最小化这些依赖关系。在松散耦合架构中,应用程序组件、模块和服务之间存在的依赖关系保持在最低限度。相反,抽象处理必要的数据传输和消息传递过程。因此,发生在一个组件上的更新或故障不太可能导致对另一个组件的意外更改。解耦可以隔离问题并防止它们在其他软件环境中传播,从而限制出现广泛错误的风险。使用 sidecar 容器来限制故障Sidecar 是一个支持容器,它与主应用程序容器在同一个 pod 中运行。Sidecar 使团队能够向容器添加功能并与外部服务集成,而无需更改主要的现有应用程序容器实例。对于软件弹性,这种技术是有益的,因为主要的应用程序逻辑和代码库保持隔离,限制了风险和故障。然而,边车也有缺点。例如,添加 sidecar 意味着开发人员负责管理更多的容器和增加的资源消耗。努力确保sidecars 不会使工作负载复杂到影响应用程序性能的程度。对于初学者,您需要建立一个完整的容器监控系统,该系统将跟踪边车并衡量它们对它们所服务的生产级容器的影响。
MySQL-体系结构以及常用存储引擎MyISAM和InnoDB初探
生猛干货带你搞定MySQL实战,轻松对应海量业务处理及高并发需求,从容应对大场面试官方文档https://dev.mysql.com/doc/如果英文不好的话,可以参考 searchdoc 翻译的中文版本http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/doc/refman/5.7/en/index.com.coder114.cn.htmlMySQL体系结构一个SQL的执行过程:客户端/服务端通信;查询缓存;查询优化处理;调用查询存储引擎;返回客户端结果集;简单了解Mysql 体系结构,MYSQL是如何执行一条SQL的MySQL区别于其他数据库最主要的特点是: 插件式存储引擎 。比较常见的存储引擎: innodb 、myisam、XtraDB、CSV、Memory、MRG_MYISAM、archive 、federated 、tokudb等存储引擎是针对表的而不是针对库的,功能上支持 不同的表使用不同的存储引擎,但非常不建议这么做。常用存储引擎之MyISAMMySQL5.5之前默认的 存储引擎。MyISAM的组成MYD (数据文件) + MYI(索引文件)创建一个表t_myisam, 存储引擎使用 MyISAM ( engine=myisam)
[root@artisan ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.7.29-log MySQL Community Server (GPL)mysql>
mysql> use artisan;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table t_myisam(id int,c1 varchar(10)) engine=myisam; # 指定存储引擎为 myisam
Query OK, 0 rows affected (0.00 sec)
mysql>
看下磁盘上存储MYD和MYI是MyISAM存储引擎特有的文件。另外还有个frm结尾的文件,并不是MyISAM存储引擎特有的,对于MySQL数据库,是通用的,用来记录表结构等信息的。MyISAM的特征表级锁 ,并发性比较差表损坏修复 ,可以通过 check table tablename 来检查, 使用 repair table tablename 来修复 . 另外mysql还提供了命令行来修复,但最好需要停库。mysql> check table t_myisam;
+------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+
| artisan.t_myisam | check | status | OK |
+------------------+-------+----------+----------+
1 row in set (0.32 sec)
mysql> repair table t_myisam;
+------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+------------------+--------+----------+----------+
| artisan.t_myisam | repair | status | OK |
+------------------+--------+----------+----------+
1 row in set (0.04 sec
支持的索引: 全文索引 、text blob 前缀索引支持数据压缩 命令行: myisampack不支持事务[root@artisan artisan]# myisampack -b -f t_myisam.MYIMyISAM的限制版本<MySQL5.0 默认表大小为4G,如果要存储大表则需要修改Max_Rows 和 Avg_Row_Length版本> MySQL5.0 默认支持为256TBMyISAM的适用场景非事务型应用只读类应用空间类应用。 5.7以前 MyISAM是唯一支持空间函数的存储引擎常用存储引擎之InnodbMySQL5.5之后默认的 存储引擎。Innodb的特征使用表空间储存数据innodb_file_per_table参数决定 ,ON :存储在独立的表空间 tablename.ibd ; OFF :系统表空间 ibdataX (X代表数字)mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
mysql>
如果关闭呢,看下如何存储的mysql> set global innodb_file_per_table = off;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF |
+-----------------------+-------+
1 row in set (0.01 sec)
mysql>那该如何选择呢?1) 系统表空间无法简单的收缩,独立的表空间可以通过optimize table明林收缩系统文件2)系统表空间,多个表顺序写入,会产生I/O瓶颈。独立表空间可以同时向多个文件刷新数据对Innodb使用独立表空间,并且5.6版本以后的MYSQL默认使用独立表空间如果原来存在系统表空间中,要迁移到独立表空间呢?使用mysqldump导出所有的数据库表数据停止MySQL服务,修改参数,并删除Innodb相关文件重启MySQL服务,重建Innodb系统表空间导入数据支持事务 (依靠Redo Log【负责持久性】 和 Undo Log 【负责回滚】)Redo Log 存储已提交的数据UndoLog 存储未提交的数据Redo log的大小设置mysql> show variables like 'innodb_log_buffer_size';
+------------------------+----------+
| Variable_name | Value |
+------------------------+----------+
| innodb_log_buffer_size | 16777216 |
+------------------------+----------+
1 row in set (0.00 sec)
mysql>
这个参数不用太大,1秒提交一次 。另外一个参数mysql> show variables like 'innodb_log_files_in_group';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| innodb_log_files_in_group | 2 |
+---------------------------+-------+
1 row in set (0.00 sec)
看到参数为2 , 所以 有2个文件行级锁 ,可以支持最大程度的并发。 行级锁由存储引擎实现的。1)锁主要用来管理共享资源的并发访问。2)锁用于实现事务的隔离性锁的类型共享锁 (也称为读锁)独占锁 (也称为写锁)锁的粒度表级锁来演示下会话一:mysql> use artisan;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show create table t_innodb; # 查看建表语句
+----------+--------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+--------------------------------------------------------------------------------------------------------------------------------+
| t_innodb | CREATE TABLE `t_innodb` (
`id` int(11) DEFAULT NULL,
`c1` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+----------+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> insert into t_innodb values(1,'aa'),(2,'bb'); # 写入2条数据
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t_innodb;
+------+------+
| id | c1 |
+------+------+
| 1 | aa |
| 2 | bb |
+------+------+
2 rows in set (0.00 sec)
mysql> lock table t_innodb write; # 加表级锁
Query OK, 0 rows affected (0.00 sec)
mysql>
会话二紧接着,这个Select 马上就出来结果了行级锁 , 存储引擎实现的,并不是MySQL实现的innodb 状态检查命令: show engine innodb status;mysql> pager more; # 设置多页展示
PAGER set to 'more'
mysql> show engine innodb status\G ; # \G 格式化查看
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
=====================================
2020-01-30 15:26:27 0x7fbe901e8700 INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 6 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 32 srv_active, 0 srv_shutdown, 166260 srv_idle
srv_master_thread log flush and writes: 166292
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 40
OS WAIT ARRAY INFO: signal count 40
RW-shared spins 0, rounds 83, OS waits 39
RW-excl spins 0, rounds 0, OS waits 0
RW-sx spins 0, rounds 0, OS waits 0
Spin rounds per wait: 83.00 RW-shared, 0.00 RW-excl, 0.00 RW-sx
------------
TRANSACTIONS
------------
Trx id counter 109372
Purge done for trx's n:o < 109372 undo n:o < 0 state: running but idle
History list length 15
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 421931820292832, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 421931820291920, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
--------
FILE I/O
--------
I/O thread 0 state: waiting for completed aio requests (insert buffer thread)
I/O thread 1 state: waiting for completed aio requests (log thread)
--More--
适用场景适用大多数OLTP应用5.7以后 支持全文索引和 空间函数多种存储引擎小结搞定MySQLhttps://artisan.blog.csdn.net/article/details/104112676?spm=1001.2014.3001.5502
《全链路数据治理-智能数据建模 》——数仓建模理论与规范(1)
数仓建模理论与规范作者:渠振方,大数据售前专家服务团队摘要:本文主要介绍数据仓库模型架构设计的目标、核心思想和核心步骤。一、 模型架构设计目标1. 数据仓库的定义数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。从上面的定义可用看到数据仓库主要有四个特点:? 面向主题:面向分析主题,如商家全域分析、交易环节分析等。? 集成的:将业务系统进行集成组装,并整合到数据仓库中。? 相对稳定:不同于OLTP 需要进行很多事务性操作(如:插入、删除、修改,等),OLAP 是一次性载入后进行多次查询访问。? 反映历史变化:不同于OLTP 仅反映当下数据状态,OLAP 可以反映数据历史的变化情况。2. 范式建模VS 维度建模建模的两大核心思想是:范式建模和维度建模。1) 范式建模法(3NF)——Inmon数据仓库建模中最常用的方法,在技术上可以解决关系型数据库的数据存储,减少大量的数据冗余;在业务上可以使模型更加简洁易懂,数据的出口唯一。? 优点:从关系型数据库的角度出发,结合了业务系统的数据模型,能很方便的实现数据仓库建模,同时逻辑清晰,避免了数据冗余。? 缺点:从底层数据向数据集市的数据进行汇总时需要进行一定变通,经常需要多表关联才能满足相应的需求。2) 维度建模——Kimball按照事实表、维表来构建数据仓库、数据集市。? 优点:事实表事先针对各个维度做了大量的预处理,比如进行预先的聚集、排序、分类等,后续基于其上的应用在访问速度很快;维度非常直观,紧紧围绕着业务模型,能快捷完成维度建模。? 缺点:当业务发生变化,需要重新进行维度的定义,往往需要重新进行维度数据的预处理,并导致大量的数据冗余,无法保证数据来源的一致性与完整性。本次分享主要介绍维度建模。3. 模型架构设计目标模型架构设计的总体目标是清晰的层次架构、合理稳定的数据分域和高效易用的数据模型。具体体现在以下四个方面:1) 易使用? 一致性? 规范性? 完整性2) 高质量? 稳定产出? 口径一致? 准确性3) 低成本? 计算成本? 存储成本? 研发成本4) 好运维? 可扩展? 可回刷? 易维护《全链路数据治理-智能数据建模 》——数仓建模理论与规范(2) /article/1231084?groupCode=tech_library
【数据库架构】OLTP 和 OLAP 的区别
OLTP 和 OLAP 都是在线处理系统。OLTP 是一种事务处理,而 OLAP 是一种分析处理系统。OLTP 是一个管理互联网上面向交易的应用程序的系统,例如 ATM。OLAP 是一个在线系统,可以报告财务报告、预测等多维分析查询。OLTP 和 OLAP 的区别OLTP 和 OLAP 都是在线处理系统。OLTP 是一种事务处理,而 OLAP 是一种分析处理系统。OLTP 是一个管理互联网上面向交易的应用程序的系统,例如 ATM。OLAP 是一个在线系统,可以报告财务报告、预测等多维分析查询。OLTP 和 OLAP 的基本区别在于 OLTP 是一个在线数据库修改系统,而 OLAP 是一个在线数据库查询回答系统。OLTP 和 OLAP 之间还有一些其他差异,我已经使用下面显示的比较图表进行了解释。内容:OLTP 与 OLAP比较表定义主要区别结论比较表基础比较OLTPOLAPBasicIt is an online transactional system and manages database modification.It is an online data retrieving and data analysis system.FocusInsert, Update, Delete information from the database.Extract data for analyzing that helps in decision making.DataOLTP and its transactions are the original source of data.Different OLTPs database becomes the source of data for OLAP.TransactionOLTP has short transactions.OLAP has long transactions.TimeThe processing time of a transaction is comparatively less in OLTP.The processing time of a transaction is comparatively more in OLAP.QueriesSimpler queries.Complex queries.NormalizationOLTP 数据库中的表是规范化的(3NF)。OLAP 数据库中的表未规范化。IntegrityOLTP 数据库必须维护数据完整性约束OLAP 数据库不会被频繁修改。因此,数据完整性不受影响。OLTP的定义OLTP 是一个在线事务处理系统。OLTP 系统的主要重点是记录当前事务的更新、插入和删除。OLTP 查询更简单、更短,因此需要更少的处理时间,也需要更少的空间。OLTP 数据库经常更新。可能会发生 OLTP 中的事务在中间失败,这可能会影响数据完整性。因此,它必须特别注意数据完整性。OLTP 数据库具有规范化表 (3NF)。OLTP 系统的最佳示例是 ATM,我们在其中使用短交易来修改我们帐户的状态。OLTP 系统成为 OLAP 的数据源。OLAP的定义OLAP 是一个在线分析处理系统。OLAP 数据库存储 OLTP 输入的历史数据。它允许用户查看多维数据的不同摘要。使用 OLAP,您可以从大型数据库中提取信息并对其进行分析以制定决策。OLAP 还允许用户执行复杂的查询以提取多维数据。在 OLTP 中,即使事务在中间失败,也不会损害数据完整性,因为用户使用 OLAP 系统从大型数据库中检索数据进行分析。只需用户再次触发查询并提取数据进行分析。OLAP 中的事务较长,因此处理时间相对较长,需要较大的空间。与 OLTP 相比,OLAP 中的事务频率较低。甚至 OLAP 数据库中的表也可能没有被规范化。OLAP 的示例是查看财务报告或预算、营销管理、销售报告等。OLTP 和 OLAP 之间的主要区别?OLTP和OLAP的区别在于OLTP是在线交易系统,OLAP是在线数据检索和分析系统。在线事务数据成为 OLTP 的数据来源。但是,不同的 OLTP 数据库成为 OLAP 的数据源。OLTP 的主要操作是插入、更新和删除,而 OLAP 的主要操作是提取多维数据进行分析。OLTP 具有短而频繁的事务,而 OLAP 具有长且不频繁的事务。与 OLTP 相比,OLAP 事务的处理时间更长。OLAP 查询相对于 OLTP 更为复杂。OLTP 数据库中的表必须进行规范化(3NF),而 OLAP 数据库中的表可能未进行规范化。由于 OLTP 经常在数据库中执行事务,如果任何事务在中间失败,可能会损害数据的完整性,因此必须注意数据的完整性。虽然在 OLAP 中事务的频率较低,但它不会过多地担心数据完整性。结论OLTP是一个在线数据修改系统,而OLAP是一个在线历史多维数据检索系统,它检索数据进行分析,有助于决策。使用哪一个取决于用户的要求,两者都适用于不同的目的。
【数据库架构】什么是 OLTP?
OLTP(在线事务处理)支持在 ATM 和在线银行、收银机和电子商务以及我们每天与之交互的许多其他服务背后进行快速、准确的数据处理。什么是 OLTP?OLTP 或在线事务处理允许大量人员(通常通过 Internet)实时执行大量数据库事务。数据库事务是对数据库中数据的更改、插入、删除或查询。OLTP 系统(以及它们支持的数据库交易)推动了我们每天进行的许多金融交易,包括网上银行和 ATM 交易、电子商务和店内购物,以及酒店和航空公司预订等等。在每种情况下,数据库交易也保留为相应金融交易的记录。OLTP 还可以推动非金融数据库交换,包括密码更改和短信。在 OLTP 中,任何数据库事务的共同定义特征是它的原子性(或不可分割性)——事务要么整体成功,要么失败(或被取消)。它不能保持在挂起或中间状态。OLTP 系统的特点通常,OLTP 系统执行以下操作:处理大量相对简单的交易:通常是对数据的插入、更新和删除,以及简单的数据查询(例如,ATM 的余额检查)。允许多用户访问相同的数据,同时确保数据完整性:OLTP 系统依靠并发算法来确保没有两个用户可以同时更改相同的数据,并且所有事务都以正确的顺序执行。这可以防止人们使用在线预订系统重复预订同一个房间,并保护共同持有的银行账户的持有人免受意外透支。强调非常快速的处理,响应时间以毫秒为单位:OLTP 系统的有效性是通过每秒可以执行的事务总数来衡量的。提供索引数据集:这些用于快速搜索、检索和查询。24/7/365 全天候可用:同样,OLTP 系统处理大量并发事务,因此任何数据丢失或停机都可能产生重大且代价高昂的后果。完整的数据备份必须随时可用。OLTP 系统需要频繁的定期备份和持续的增量备份。OLTP 与 OLAPOLTP 经常与在线分析处理或 OLAP 混淆。两者都有相似的首字母缩写词,并且是在线数据处理系统,但这就是相似之处。OLTP 针对执行在线数据库事务进行了优化。OLTP 系统专为一线工作人员(例如,收银员、银行出纳员、部分服务台文员)或客户自助服务应用程序(例如,网上银行、电子商务、旅行预订)而设计。另一方面,OLAP 针对进行复杂数据分析进行了优化。OLAP 系统专为数据科学家、业务分析师和知识工作者使用而设计,它们支持商业智能 (BI)、数据挖掘和其他决策支持应用程序。毫不奇怪,OLTP 和 OLAP 系统有几个明显的技术差异:OLTP 系统使用关系数据库,可以容纳大量并发用户和频繁的查询和更新,同时支持非常快的响应时间。OLAP 系统使用多维数据库——一种由多个关系数据库创建的特殊类型的数据库,它支持涉及来自当前和历史数据的多个数据事实的复杂查询。(OLAP 数据库可以组织为数据仓库。)OLTP 查询很简单,通常只涉及一个或几个数据库记录。OLAP 查询是涉及大量记录的复杂查询。OLTP 事务和查询响应时间快如闪电;OLAP 响应时间要慢几个数量级。OLTP 系统经常修改数据(这是事务处理的本质);?OLAP 系统根本不修改数据。OLTP 工作负载涉及读取和写入的平衡;OLAP 工作负载是读取密集型的。OLTP 数据库需要的存储空间相对较少;OLAP 数据库处理大量数据集,并且通常需要大量存储空间。OLTP 系统需要频繁或并发备份;OLAP 系统的备份频率要低得多。值得注意的是,OLTP 系统通常充当 OLAP 系统的信息源。通常,使用 OLAP 执行分析的目标是改进业务战略和优化业务流程,这可以为改进 OLTP 系统提供基础。要深入了解这些方法之间的差异,请查看“OLAP 与 OLTP:有什么区别?”OLTP 系统示例自互联网和电子商务时代出现以来,OLTP 系统已经无处不在。它们几乎存在于每个行业或垂直市场以及许多面向消费者的系统中。OLTP 系统的日常示例包括:ATM 机(这是经典的、最常被引用的示例)和网上银行应用程序信用卡支付处理(在线和店内)订单输入(零售和后台)在线预订(票务、预订系统等)记录保存(包括健康记录、库存控制、生产调度、索赔处理、客户服务票务和许多其他应用程序)
【数据库架构】OLTP 和 OLAP:实际比较
OLTP 和 OLAP:这两个术语看起来相似,但指的是不同类型的系统。在线事务处理 (OLTP) 实时捕获、存储和处理来自事务的数据。在线分析处理 (OLAP) 使用复杂的查询来分析来自 OLTP 系统的汇总历史数据。什么是 OLTP?OLTP 系统在数据库中捕获和维护事务数据。每个事务都涉及由多个字段或列组成的单个数据库记录。示例包括银行和信用卡活动或零售结账扫描。在 OLTP 中,重点是快速处理,因为 OLTP 数据库经常被读取、写入和更新。如果事务失败,内置系统逻辑可确保数据完整性。什么是 OLAP?OLAP 对从 OLTP 数据库和其他来源聚合而成的大量历史数据应用复杂查询,用于数据挖掘、分析和商业智能项目。在 OLAP 中,重点是对这些复杂查询的响应时间。每个查询都涉及从多行聚合的一列或多列数据。示例包括同比财务业绩或营销线索生成趋势。OLAP 数据库和数据仓库使分析师和决策者能够使用自定义报告工具将数据转化为信息。OLAP 中的查询失败不会中断或延迟客户的事务处理,但会延迟或影响商业智能洞察的准确性。ETL:连接OLTP和OLAP的力量来自一个或多个 OLTP 数据库的数据通过称为提取、转换、加载 (ETL) 的过程被摄取到 OLAP 系统中。使用 ETL 工具,用户可以从多个来源收集数据并将其发送到目的地,例如 OLAP 数据仓库,在那里由分析和商业智能工具查询以获取洞察力。OLTP 与 OLAP:并排比较OLTP 是可操作的,而 OLAP 是信息性的。看一眼这两种处理的主要特征就可以说明它们的根本区别,以及它们是如何协同工作的。??OLTPOLAP特征处理大量小交易处理具有复杂查询的大量数据查询类型Simple standardized queriesComplex queries操作Based on INSERT, UPDATE, DELETE commandsBased on SELECT commands to aggregate data for reporting响应时间Milliseconds秒、分钟或小时,具体取决于要处理的数据量设计Industry-specific, such as retail, manufacturing, or banking特定主题,例如销售、库存或营销来源TransactionsAggregated data from transactions目的实时控制和运行基本业务运营计划、解决问题、支持决策、发现隐藏的见解数据更新由用户发起的简短、快速的更新使用计划的、长时间运行的批处理作业定期刷新数据空间要求如果归档历史数据,通常很小由于聚合大型数据集而通常很大备份和恢复需要定期备份以确保业务连续性并满足法律和治理要求可以根据需要从 OLTP 数据库重新加载丢失的数据,以代替定期备份生产率提高最终用户的生产力提高业务经理、数据分析师和高管的工作效率Data view列出日常业务交易企业数据的多维视图用户示例面向客户的人员、文员、在线购物者知识工作者,例如数据分析师、业务分析师和高管数据库设计标准化数据库以提高效率用于分析的非规范化数据库OLTP 提供当前业务活动的即时记录,而 OLAP 随着时间的推移从该数据中生成并验证洞察力。这种历史视角可以实现准确的预测,但与所有商业智能一样,OLAP 生成的洞察力仅与它们产生的数据管道一样好。Stitch 优化数据管道要从 OLTP 数据中获得可操作的情报,必须将其提取、转换并加载到数据仓库中进行分析。虽然这可以通过内部编程资源完成,但使用 ETL 工具可以更有效地处理数据摄取。ETL 工具消除了由于不断变化的数据源 API、报告要求和业务需求而对代码进行持续维护的需要。像 Stitch 这样的 ETL 工具可优化 OLTP 数据摄取,从而腾出时间和 IT 员工专注于更多增值活动。简化将 OLTP 源数据拉入您的 OLAP 仓库的过程。选择一个可随您的数据扩展的解决方案,并为您提供所需的支持,以保持领先于变化并获得洞察力。
【数据管理】OLAP 与 OLTP:有什么区别?
这些术语经常相互混淆,那么它们的主要区别是什么?您如何根据自己的情况选择合适的术语?我们生活在一个数据驱动的时代,使用数据做出更明智决策并更快响应不断变化的需求的组织更有可能脱颖而出。您可以在新的服务产品(例如拼车应用程序)以及推动零售的强大系统(电子商务和店内交易)中看到这些数据。在数据科学领域,有两种类型的数据处理系统:在线分析处理(OLAP)和在线事务处理(OLTP)。主要区别在于,一种使用数据来获得有价值的见解,而另一种则纯粹是可操作的。但是,有一些有意义的方法可以使用这两个系统来解决数据问题。问题不在于选择哪个,而是如何根据您的情况充分利用这两种处理类型。什么是 OLAP?在线分析处理 (OLAP) 是一种用于对大量数据进行高速多维分析的系统。通常,这些数据来自数据仓库、数据集市或其他一些集中式数据存储。OLAP 是数据挖掘、商业智能和复杂分析计算以及财务分析、预算和销售预测等业务报告功能的理想选择。大多数 OLAP 数据库的核心是 OLAP 多维数据集,它允许您快速查询、报告和分析多维数据。什么是数据维度?它只是特定数据集的一个元素。例如,销售数据可能具有与地区、一年中的时间、产品型号等相关的多个维度。OLAP 多维数据集扩展了传统关系数据库模式的逐列格式,并为其他数据维度添加了层。例如,虽然立方体的顶层可能按地区组织销售,但数据分析师也可以“深入”到按州/省、城市和/或特定商店进行销售的层。OLAP 的这种历史聚合数据通常存储在星型模式或雪花模式中。下图显示了多维销售数据的 OLAP 多维数据集 - 按地区、按季度和按产品:什么是 OLTP?在线事务处理 (OLTP) 支持大量人员(通常通过 Internet)实时执行大量数据库事务。OLTP 系统支持我们的许多日常交易,从 ATM 到店内购物再到酒店预订。OLTP 还可以推动非金融交易,包括密码更改和短信。OLTP 系统使用可以执行以下操作的关系数据库:处理大量相对简单的事务——通常是数据的插入、更新和删除。启用对相同数据的多用户访问,同时确保数据完整性。支持非常快速的处理,响应时间以毫秒为单位。为快速搜索、检索和查询提供索引数据集。24/7/365 全天候可用,具有持续增量备份。许多组织使用 OLTP 系统为 OLAP 提供数据。换句话说,OLTP 和 OLAP 的结合在我们的数据驱动世界中是必不可少的。OLAP和OLTP的主要区别:处理类型这两个系统的主要区别在于它们的名称:分析型与事务型。每个系统都针对该类型的处理进行了优化。OLAP 经过优化,可进行复杂的数据分析,从而做出更明智的决策。OLAP 系统专为数据科学家、业务分析师和知识工作者使用而设计,它们支持商业智能 (BI)、数据挖掘和其他决策支持应用程序。另一方面,OLTP 针对处理大量事务进行了优化。OLTP 系统专为一线工作人员(例如收银员、银行出纳员、酒店前台职员)或客户自助服务应用程序(例如网上银行、电子商务、旅行预订)而设计。OLAP 和 OLTP 之间的其他主要区别?重点:OLAP 系统允许您提取数据以进行复杂分析。为了推动业务决策,查询通常涉及大量记录。相比之下,OLTP 系统非常适合在数据库中进行简单的更新、插入和删除。查询通常只涉及一条或几条记录。数据源:OLAP 数据库具有多维模式,因此它可以支持从当前和历史数据中对多个数据事实进行复杂查询。不同的 OLTP 数据库可以作为 OLAP 聚合数据的来源,它们可以组织为一个数据仓库。另一方面,OLTP 使用传统的 DBMS 来容纳大量实时事务。处理时间:在 OLAP 中,响应时间比 OLTP 慢几个数量级。工作负载是读取密集型的,涉及大量数据集。对于 OLTP 事务和响应,每毫秒都很重要。工作负载涉及通过 SQL(结构化查询语言)进行的简单读写操作,需要更少的时间和更少的存储空间。可用性:由于它们不修改当前数据,因此 OLAP 系统的备份频率可以降低。然而,OLTP 系统经常修改数据,因为这是事务处理的本质。它们需要频繁或并发备份以帮助维护数据完整性。OLAP 与 OLTP:哪个最适合您?为您的情况选择正确的系统取决于您的目标。您需要单一平台来获取业务洞察力吗?OLAP 可以帮助您从海量数据中释放价值。您需要管理日常交易吗?OLTP 旨在每秒快速处理大量事务。请注意,传统的 OLAP 工具需要数据建模专业知识,并且通常需要跨多个业务部门进行合作。相比之下,OLTP 系统对业务至关重要,任何停机都会导致交易中断、收入损失和品牌声誉受损。大多数时候,组织同时使用 OLAP 和 OLTP 系统。事实上,OLAP 系统可用于分析导致 OLTP 系统中的业务流程改进的数据。了解有关 OLAP 和 OLTP 的更多信息在线处理系统是为我们的日常生活提供动力的业务决策和数据交易的背后。要了解有关与 OLAP 和 OLTP 一起使用的数据库系统的更多信息,我们鼓励您浏览有关这些主题的学习中心文章。我们还建议查看有关关系数据库及其 OLTP、IoT 解决方案和 OLAP 数据仓库用例的 IBM 内容。什么是 OLAP?什么是 OLTP?关系数据库的用例
【数据库架构】什么是 OLAP?
什么是 OLAP?OLAP(用于在线分析处理)是一种软件,用于对来自数据仓库、数据集市或其他一些统一的集中式数据存储的大量数据进行高速多维分析。大多数业务数据都有多个维度——数据被分解为多个类别以进行展示、跟踪或分析。例如,销售数据可能具有与位置(地区、国家、州/省、商店)、时间(年、月、周、日)、产品(服装、男/女/童、品牌、类型)相关的多个维度,和更多。但在数据仓库中,数据集存储在表中,每个表一次只能将数据组织到其中两个维度中。OLAP 从多个关系数据集中提取数据并将其重新组织成多维格式,从而实现非常快速的处理和非常有洞察力的分析。什么是 OLAP 多维数据集?大多数 OLAP 系统的核心,OLAP 多维数据集是一个基于数组的多维数据库,与传统的关系数据库相比,它可以更快、更高效地处理和分析多个数据维度。关系数据库表的结构类似于电子表格,以二维、逐列的格式存储各个记录。数据库中的每个数据“事实”都位于两个维度(行和列)的交集处,例如区域和总销售额。SQL 和关系数据库报告工具当然可以查询、报告和分析存储在表中的多维数据,但随着数据量的增加,性能会降低。并且需要大量的工作来重新组织结果以专注于不同的维度。这就是 OLAP 多维数据集的用武之地。OLAP 多维数据集通过附加层扩展了单个表,每个层都添加了额外的维度——通常是维度的“概念层次结构”中的下一个级别。例如,立方体的顶层可能按地区组织销售;附加层可以是国家、州/省、城市甚至特定商店。理论上,一个立方体可以包含无数层。(代表三个以上维度的 OLAP 多维数据集有时称为超多维数据集。)更小的多维数据集可以存在于层内——例如,每个商店层可以包含按销售人员和产品安排销售的多维数据集。在实践中,数据分析师将创建仅包含他们需要的层的 OLAP 多维数据集,以实现最佳分析和性能。OLAP 多维数据集支持四种基本类型的多维数据分析:向下钻取向下钻取操作通过以下两种方法之一将不太详细的数据转换为更详细的数据——在概念层次结构中向下移动或向多维数据集添加新维度。例如,如果您查看组织日历或财政季度的销售数据,您可以向下钻取以查看每个月的销售额,在“时间”维度的概念层次结构中向下移动。卷起上卷与下钻功能相反——它通过在概念层次结构中向上移动或通过减少维数来聚合 OLAP 多维数据集上的数据。例如,您可以通过查看每个国家的数据而不是每个城市的数据,在“位置”维度的概念层次结构中向上移动。切片和骰子(Slice and dice)切片操作通过从主 OLAP 多维数据集中选择单个维度来创建子多维数据集。例如,您可以通过突出显示组织的第一个财政或日历季度(时间维度)的所有数据来执行切片。骰子操作通过在主 OLAP 多维数据集中选择多个维度来隔离子多维数据集。例如,您可以通过按组织的日历或财政季度(时间维度)以及美国和加拿大内部(位置维度)突出显示所有数据来执行掷骰子操作。枢 (Pivot)pivot 函数旋转当前的多维数据集视图以显示数据的新表示 - 启用数据的动态多维视图。OLAP 数据透视表功能与电子表格软件(如 Microsoft Excel)中的数据透视表功能相当,但虽然 Excel 中的数据透视表可能具有挑战性,但 OLAP 数据透视表相对更易于使用(需要较少的专业知识)并且具有更快的响应时间和查询性能。MOLAP 与 ROLAP 与 HOLAPMOLAP直接与多维 OLAP 多维数据集一起工作的 OLAP 称为多维 OLAP 或 MOLAP。同样,对于大多数用途,MOLAP 是最快和最实用的多维数据分析类型。但是,在某些情况下,还有两种其他类型的 OLAP 可能更可取:ROLAPROLAP 或关系 OLAP 是一种多维数据分析,它直接对关系表上的数据进行操作,而无需先将数据重新组织到一个多维数据集中。如前所述,SQL 是用于多维查询、报告和分析的完美工具。但是所需的 SQL 查询很复杂,性能可能会拖累,并且生成的数据视图是静态的——它不能被旋转以表示不同的数据视图。当直接处理大量数据的能力比性能和灵活性更重要时,ROLAP 是最佳选择。HOLAPHOLAP 或混合 OLAP 尝试在单个 OLAP 体系结构内创建关系数据库和多维数据库之间的最佳分工。关系表包含大量数据,OLAP 多维数据集用于聚合和推测处理。HOLAP 需要同时支持 MOLAP 和 ROLAP 的 OLAP 服务器。HOLAP 工具可以“钻取”数据立方体到关系表,这为快速数据处理和灵活访问铺平了道路。这种混合系统可以提供更好的可扩展性,但在访问关系数据源时无法避免不可避免的减速。此外,其复杂的架构通常需要更频繁的更新和维护,因为它必须存储和处理来自关系数据库和多维数据库的所有数据。出于这个原因,HOLAP 最终可能会变得更加昂贵。OLAP 与 OLTP在线事务处理(OLTP)是指专注于面向事务的数据和应用程序的数据处理方法和软件。OLAP 和 OLTP 的主要区别在于名称:OLAP 本质上是分析性的,而 OLTP 是事务性的。OLAP 工具设计用于对数据仓库中的数据进行多维分析,其中包含交易数据和历史数据。事实上,OLAP 服务器通常是数据仓库解决方案的中间分析层。OLAP 的常见用途包括数据挖掘和其他商业智能应用程序、复杂的分析计算和预测场景,以及财务分析、预算和预测计划等业务报告功能。OLTP 旨在通过尽可能快速准确地处理最近的事务来支持面向事务的应用程序。OLTP 的常见用途包括 ATM、电子商务软件、信用卡支付处理、在线预订、预订系统和记录保存工具。要深入了解这些方法之间的差异,请查看“OLAP 与 OLTP:有什么区别?”OLAP 和云架构OLAP 使公司能够通过将其转换为最实用的多维分析格式来最大限度地发挥其公司数据的潜力。这反过来又使识别有价值的业务洞察变得更加容易。但是,如果将这些系统保留在内部,则会限制扩展的潜力。基于云的 OLAP 服务更便宜且更易于设置,这使得它们对预算有限的小型企业或初创公司更具吸引力。企业可以利用基于云的数据仓库的巨大潜力,以无与伦比的速度执行复杂的分析,因为它们使用大规模并行处理 (MPP)。因此,公司可以在云速度和规模上使用 OLAP,分析大量数据,而无需将其从云数据仓库中移出。Constance Hotels、Resorts & Golf 是一家豪华酒店集团,在印度洋的岛屿上拥有九家酒店。然而,缺乏岛与岛之间的通信让位于组织孤岛,每个度假村的业务数据都是孤立的。该组织构建了一个云数据仓库和分析架构,以将所有本地系统和工具与基于云的中央数据存储库链接起来。在此过程中,公司获得了利用高级预测分析和实施 OLAP 系统所需的全集团洞察力。云架构中的 OLAP 是面向未来构建的快速且经济高效的解决方案。制作多维数据集后,团队可以使用现有的商业智能工具即时连接 OLAP 模型,并从他们的云数据中获取交互式实时洞察。
三高Mysql - Mysql特性和未来发展
引言 内容为慕课网的《高并发 高性能 高可用 Mysql 实战》视频的学习笔记内容和个人整理扩展之后的笔记,这一节主要讲讲Mysql5.8比较常用的几个新特性以及针对内部服务器的优化介绍,理论部分的内容比较多简单看看理解一下即可。 如果内容比较难可以跟随《Mysql是怎么样运行》个人读书笔记专栏补补课: 地址如下:从零开始学Mysql。?Mysql8.0新特性Mysql为什么叫8.0?其实就是个数字游戏可以直接认为是5.8。Mysql8.0有什么新特性:窗口函数:rank()列分隔,分为多个窗口在窗口里面可以执行特定的函数-- partition by 排名,案例指的是按照顾客支付金额排名。
-- rank() 窗口函数
select *,
rank() over ( partition by customer_id order by amount desc) as ranking
from
payment;
隐藏索引暂时隐藏某个索引。可以隐藏和显示索引,测试索引作用,多用于开发的时候评估索引的可用性。show index from payment;
-- 隐藏索引
alter table payment alter index fk_payment_rental Invisible;
-- 显示索引
alter table payment alter index fk_payment_rental Visible;
降序索引8.0 之前只有升序的索引,自8.0之后引入了降序索引的索引排序方式,用于进行某些特殊查询的情况下也可以走索引。通用表达式(CTE)CTE表达式预先定义复杂语句中反复使用的中间结果可以简单认为是一个临时视图select b,d
from (select a,b from table1) join (select a,b from table2)
where cte1.a = cte2.c;
-- 简化
with
cte1 as (select a,b from table1),
cte1 as (select a,b from table2)
select b,d
from cte1 join cte2
where cte.a = cte2.c;
UTF8编码UTF8mb4作为默认的字符集DDL 事务支持DDL事务,元数据操作可以回滚对于不同数据库之间的DDL对比,可以看这篇文章:juejin.cn/post/698654…InnoDB Cluster:组复制不是说Mysql可以组集群了而是说保证强一致性的数据同步,下面是关于一些核心组件的解释:Mysql Router:路由管理端绕过路由进行配置,可以实现主备的自由切换。另外从上面这个图还可以看到在新的概念图里面一般不会把节点叫master/slave了,额,zzzq就完事了。Mysql官方的组复制其实是借用了Percona XtraDB Cluster的设计思路,只不过加了一些辅助工具看起来比较强一点而已,强一致性的组复制早就被实现过了,比如Percona XtraDB Cluster,设计思路也是来自于Zookeeper的一致性协议,可以认为是原理大同小异。最后强一致性的最大问题那就是等待同步的时间是否可以被系统接受,所以看似组复制在尝试解决复制带来的数据同步问题实际上这种代价看上去还是比较大的。数据库的分类对于数据库我们可以做出下面的总结,市面上主流的数据库基本都可以按照下面的几种方式进行归类:用途归类,存储形式归类和架构分类。用途分类:OLTP:在线事务处理OLAP:在线分析处理HTAP:事务和分析混合处理OLTP:在线事务交易和处理系统,SQL语句不复杂大都用于事务的处理。并发量打,可用性的要求十分高。(Mysql / Postgres)OLAP:在线分析处理系统,SQL语句复杂,并且数据量十分大,单个事务为单位。(Hive)HTAP:混合两种数据库优点,一种架构多功能。(设计思路优秀,但是实际产出很可能类似新能源汽车,烧油不行烧点也不行)存储形式分类行存储:传统数据库的存储形式列存储:针对传统OLTP数据库大数据量分析而逐渐出现的一种格式,行格式利于数据存储和数据分析。K/V存储:无论是行还是列存储,似乎都逃不过KV的概念,这一点读者可以自行思考理解。架构分类Share-Everything CPU、内存、硬盘,多合一,类似电脑(数据库不用)Share-Memory多CPU独立,内存,硬盘,超级计算机架构(多CPU同内存通信,同一片大内存超级计算机)SHare-Disk一个CPU绑定一个内存,硬盘独立,共享存储的架构。Shared-NothingCPU、内存、硬盘共享,常见集群的架构。单体数据库之王PostgresSQL说实话国内用的人太少了国内市场没有选择并且被忽视的优秀数据库,然而在国外Postgre SQL随着开源的不断发展以及比Mysql更优秀的设计市场占有率在逐年上升,同时Postgresql对于数据库设计者来说也是很好的范本,无论是学习还是研究都是十分好的参考资料,最后Postgresql是开源的社区在国外也比较活跃,这一点很重要,可惜国内只能老老实实研究Mysql了。Mysql随着Oracle的商业化逐渐自闭式发展进步也越来越小实在看不到他的未来。Postgresql和Mysql类似的地方以及更加进步的地方:Mysql类似功能性能更好,更稳定代码质量更高有赶超Mysql的优势良好的插件,包含并不完全列举比如下面的这些插件:Postgres-XL(OLTP)GTM管理每个事务的执行Coordinator解析SQL,制定执行计划,分发DataNode返回执行结果到Coordinator。GreenPlum 是给予Postgres分布式分析集群高性能SQL优化器:GPORCASlice的实现机制Mysql如何魔改首先看看PolarDB的改进,PolarDB是阿里巴巴的东西所以除了内部人员可能使用之外外部的技术人员基本接触不到这个东西,这里简单介绍相关的设计思路。下面为相关的设计图:在PorlarDB中包含下面的关键组件:ECS:客户端Read/Write Splitter 读写分离中间件Mysql节点,文件系统, 数据路由和数据缓冲。主备服务器RMDA统一的管理Data Chunk Server:数据的存储桶,存储服务器,集群的方式存储Raft:强一致性的存储服务器。日志传送和共享存储备库如何查询数据在传统的方式中,备库使用下面的方式进行处理创新和改进点:在读取事务改动的时候,使用了叠加redo log的方式处理,防止读写库的数据不一致的问题如何支撑双十一?双十一刚刚出现的时候是一个十分火热的话题,然而到了现在电商成熟的年代双十一似乎变成了“日常活动”......,双十一的支撑依靠十分核心的中间组件:OceanBase,也被称之为new sql数据库。OceanBase属于行列互存的架构最大的特点是机房跨全球。存储引擎的最下层是分片的分区层,Share-Nothing架构,数据分区使用的一主两备的结构。数据如何更新?数据更新依靠下面的流程,看起来比较负责,其实这里的设计思路有点类似谷歌在2006年的“Bigtable”设计,而SSTable于这篇论文中首次出现,SSTable主要用于给予LSM-Tree数据结构的日志存储引擎。如果不清楚什么是LSM-Tree,可以阅读下面的文章了解:?《数据密集型型系统设计》LSM-Tree VS BTree - 掘金 (juejin.cn)国产混合数据库-TiDBTiDB简介:下面的内容引用自官方介绍:TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。简单来说Tidb主要有下面的几个特点:一键水平扩容或者缩容金融级高可用实时HTAPHTAP数据库(Hybrid Transaction and Analytical Process,混合事务和分析处理)。2014年Gartner的一份报告中使用混合事务分析处理(HTAP)一词描述新型的应用程序框架,以打破OLTP和OLAP之间的隔阂,既可以应用于事务型数据库场景,亦可以应用于分析型数据库场景。实现实时业务决策。这种架构具有显而易见的优势:不但避免了繁琐且昂贵的ETL操作,而且可以更快地对最新数据进行分析。这种快速分析数据的能力将成为未来企业的核心竞争力之一。云原生的分布式数据库兼容Mysql5.7 协议和Mysql生态。虽然TiDB被使用之后有许多令人诟病的缺点,同时因为是新型的数据库对于一些实践问题的解答资料也比较少,但是作为一款非常有潜力的数据库还是值得我们保持关注的。TiDB的架构设计如下:纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容支持 SQL,对外暴露 Mysql 的网络协议,并兼容大多数 Mysql 的语法,在大多数场景下可以直接替换 Mysql默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明支持 ACID 事务,对于一些有强一致需求的场景友好,例如:银行转账具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景CockroachDB 小强数据库,2015启动,谷歌前员工发起。 CockroachDB,目标是打造一个开源、可伸缩、跨地域复制且兼容事务的 ACID 特性的分布式数据库,它不仅能实现全局(多数据中心)的一致性,而且保证了数据库极强的生存能力,就像 Cockroach(蟑螂)这个名字一样,是打不死的小强。 CockroachDB 的思路源自 Google 的全球性分布式数据库 Spanner。其理念是将数据分布在多数据中心的多台服务器上,实现一个可扩展,多版本,全球分布式并支持同步复制的数据库。小结 本节内容主要针对Mysql的一些新特性以及其他第三方如何对于数据库进行扩展的,同时介绍了数据库的分类,我们可以发现数据库的分类最后都可以按照某种特定的类型进行划分。写在最后 本节内容非常简单,读者可以根据相关的内容进行深入学习即可。