2019年天猫双十一总成交额在11日24时最终定格在2684亿,再次刷新双十一交易额记录,交易峰值54.4万笔/秒,交易总额相比去年增加549亿元,同比2018年的2135亿增长25.71%。
2019天猫双11交易额统计数据:
- 00:01:36,2019天猫双十一交易额破100亿,用时96秒,2018年破百亿用时2分05秒;
- 00:12:49,2019天猫双十一交易额破500亿,用时12分49秒;
- 01:03:59,2019天猫双十一交易额超过1000亿
- 01:26:07,2019天猫双十一交易额超过1207亿!打破2016年天猫双11全天交易额纪录;
- 10:04:49:,2019天猫双十一交易额超过1682亿!打破2017年天猫双11全天交易额纪录!!
- 12:00:00,2019天猫双11全球半天成交额已超1845亿!
- 14:21:27,2019天猫双十一交易额超过2000亿元!
- 16:31:21,天猫双十一交易额2135亿,打破2018年天猫双11全天交易额纪录!
- 24:00:00,2019天猫双11交易额为2684亿元,超出2018年全天交易额549亿。
交易峰值54.4万笔/秒,阿里巴巴是如何做到能在这么高的并发量的情况下保证数据库的稳定的呢?那就要归功于阿里巴巴OceanBase数据库,它拥有卓越的性能,该数据库凭借强劲的性能保证“双11”淘宝、支付宝、天猫等等稳定运行,已在蚂蚁金服和阿里巴巴业务系统中得到了广泛应用。
俗话说,外行看热闹,内行看门道。当你为天猫“双11”总成交额又创世界纪录疯狂打Call之时,可否注意到这背后,除了阿里云平台稳定、线性的输出以外,还有OceanBase的优异表现?OceanBase是典型的“用出来”的数据库,它经历过最为严苛的极限场景的考验,比如双11、新春红包等。除了服务阿里巴巴 / 蚂蚁金服,自2017年开始,OceanBase已经对外商用,服务给了更多的外部客户,包括建设银行、南京银行、中国人保健康、西安银行等。
我们来看看OceanBase的简介:
要看懂上图就要了解什么是数据库,什么是关系型数据库。
数据库简介
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
数据库就是一种特殊的文件,其中存储着需要的数据
当前主要使用两种类型的数据库:关系型数据库RDBMS(Relational Database Management System)、非关系型数据库。
数据库的特点:
- 持久化存储
- 读写速度极高
- 保证数据的有效性
- 对程序支持性非常好,容易扩展
所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过这些关联的表格分类、合并、连接或选取等运算来实现数据的管理。就像Excel中的:
关系型数据库的主要产品:
- oracle:在以前的大型项目中使用,银行,电信等项目
- mysql:web时代使用最广泛的关系型数据库
- ms sql server:在微软的项目中使用
- sqlite:轻量级数据库,主要应用在移动平台
非关系型数据库也被称为NoSQL数据库,NoSQL的本意是“Not Only SQL”,指的是非关系型数据库,而不是“NO SQL”的意思,因此,NoSQL的产生并不是要彻底否定关系型数据库,而是作为传统数据库的一个有效补充。NoSQL数据库在特定的场景下可以发挥难以想象的高效率和高性能。
非关系型数据库的主要产品:
- Memcached(key-value):开源的、高性能的、具有分布式内存对象的缓存系统
- redis(key-value):支持内存缓存、持久化储存、主从集群、分布式等功能
- Cassandra(Column-oriented):最初由Facebook开发,用于储存特别大的数据
- MongoDB (Document-oriented):一个介于关系数据库和非关系数据库之间的产品
OceanBase是关系型数据库,全兼容MySQL,也就是说学好MySQL就是学好它。看看OceanBase如今在世界上的地位:
接下来我们来看看MySQL数据库:
MySQL数据库入门
MySQL 简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于Oracle旗下产品。
特点
开源 免费 不要钱 使用范围广,跨平台支持性好,提供了多种语言调用的 API,是学习数据库开发的首选
安装
系统以Ubuntu为例,其他系统百度有很多教程,在终端中输入如下命令,回车后,然后按照提示输入:
sudo apt-get install mysql-serversudo apt-get install mysql-client
服务器用于接收客户端的请求、执行sql语句、管理数据库,服务器端一般以服务方式管理,名称为mysql。
sudo service mysql start
配置
配置文件目录为/etc/mysql/mysql.cnf
- 主要配置项如下
bind-address表示服务器绑定的ip,默认为127.0.0.1port表示端口,默认为3306datadir表示数据库目录,默认为/var/lib/mysqlgeneral_log_file表示普通日志,默认为/var/log/mysql/mysql.loglog_error表示错误日志,默认为/var/log/mysql/error.log
登录
输入mysql -u root -p
提示输入之前第一条命令设置的密码,出现如下界面则安装成功
常见定义
- 主键 :唯一标识一行记录的字段
- 数据行(记录) : 一行记录某个事物的完整信息的数据
- 数据列(字段) : 一列数据类型相同的数据
- 数据表 : 有若干字段和记录组成
- 数据库 : 由若干数据表组成
常见数据类型:
约束
- 主键primary key:物理上存储的顺序
- 非空not null:此字段不允许填写空值
- 惟一unique:此字段的值不允许重复
- 默认default:当不填写此值时会使用默认值,如果填写时以填写为准
- 外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
数据库操作
数据库登录和退出:
数据库的基本操作:
数据表的基本操作:
数据表数据的基本操作:
- 增 insert into table_name values(),(),();
- 删 delete from table_name where 条件;
- 改 update table_name set key=value where 条件;
- 查 select */查询的字段 from table_name where 条件;
当然,MySQL查询是个大内容,有条件查询、排序、聚合函数、分组、分页、连接查询、自关联查询、子查询等等,如何写好SQL语句又是一门大学问,后面将会降到。查询的完整格式:
SELECT select_expr [,select_expr,...] [ FROM tb_name [WHERE 条件判断] [GROUP BY {col_name | postion} [ASC | DESC], ...] [HAVING WHERE 条件判断] [ORDER BY {col_name|expr|postion} [ASC | DESC], ...] [ LIMIT {[offset,]rowcount | row_count OFFSET offset}]]
MySQL高级进阶
视图
# 视图的定义方式:create view 视图名称(一般使用v开头) as select语句;# 查看视图show tables; # 使用视图select * from v_goods_info; # 删除视图drop view 视图名字;
事务
1.事务四大特性ACID
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
2.开启事务
开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中
begin; 或者 start transaction;
执行SQL语句
3.提交事务
将缓存中的数据变更维护到物理表中
commit;
4.回滚事务
放弃缓存中变更的数据 表示事务执行失败 应该回到开始事务前的状态
rollback;
索引
# 查看表中已有索引show index from 表名;# 创建索引alter table 表名 add index 索引名【可选】(字段名,…);create index 索引名称 on 表名(字段名称(长度))# 删除索引drop index 索引名称 on 表名;
优点:
加快数据的查询速度
缺点:
创建索引会浪费时间和占用磁盘空间,并且随着数据量的增加所耗费的时间会越来越多
使用原则:
- 经常发生数据更新的表避免使用过多的索引
- 数据量小的表没有必要使用索引
- 数据量较大同时不会频发发生数据更改的表可以使用索引
三范式
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,
各种范式呈递次规范,越高的范式数据库冗余越小。
数据冗余是指数据之间的重复,也可以说是同一数据存储在不同数据文件中的现象
六种范式:
- 第一范式(1NF):强调的是字段的原子性,即一个字段不能够再分成其他几个字段。
- 第二范式(2NF):一是表必须有一个主键,二是非主键字段必须完全依赖于主键,而不能只依赖于主键的一部分
- 第三范式(3NF):不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
- 巴斯-科德范式(BCNF):第三范式的基础上进一步消除主属性对于码的部分函数依赖和传递依赖
- 第四范式 ( 4NF)限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖
- 第五范式(5NF,又称完美范式):消除了4NF中的连接依赖
E-R模型
- E-R模型由 实体、属性、实体之间的关系构成,主要用来描述数据库中表之间的关系和表结构。
- 开发流程是先画出E-R模型,然后根据三范式设计数据库中的表结构
数据库是门很大很广的学问,想一下子学完是不可能的,本篇先就讲讲这些基础的概念,还有相关的数据库设计和数据库架构及数据库优化将在后面讲,也将讲到OceanBase中提到的分布式的概念,敬请关注。
作者简介:Python菜鸟工程师,将在接下来的一段时间内与大家分享一些与Python相关的知识点。如若文中出现问题,各位大佬多多指点,互相学习。喜欢的关注一个吧!谢谢!
閱讀更多 大鬍子網絡 的文章