Nosql 非关系数据库
数据存储不需要固定的模式
NoSql特点
- 易扩展(数据之间无关系)
- 大数据量高性能(细粒度,cache性能高)
- 多样灵活的数据模型(增删字段容易)
关系数据库 vs NoSql
传统关系数据库:
ACID
事务所具有的四个特性: 一致性、原子性、隔离性、持久性
上面图片内容参考https://www.jianshu.com/p/50543887d694
非关系数据库
CAP
CAP理论由Eric Brewer在2000年作为猜想提出,并在2002年由Seth Gilbert和Nancy Lynch证明了其正确性。CAP理论的内容为:
在分布式系统中,不可能同时满足一致性(consistency)、可用性(availability)、分区容错性(partition tolerance)三大特征,最多只能同时满足其中二者。
CAP3选2
分布式系统分区容错性必须要保证,而在一致性和可用性之间做出权衡。
- CP HBase
- AP redis、mongodb (消息订阅,发微博)
BASE理论
BASE是对CAP一致性和可用性权衡的结果.
BASE理论由Dan Prichett在2008年藉由论文《BASE:An ACID Alternative》提出。它是三个词组的首字母缩写,即:
- 基本可用(basically available)
- 软状态(soft state)
- 最终一致性(eventually consistent)
参考:https://cloud.tencent.com/developer/article/1630745
MYSQL
介绍
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。为提高速度和可靠性而设计的,但要以完全遵守标准SQL为代价.
优点
1.受欢迎程度和易用性:拥有使用MySQL经验的数据库管理员多;对于如何安装和管理MySQL数据库,有在线文档以及许多旨在简化数据库入门过程的第三方工具。
2.安全性:与SQLite不同,MySQL支持用户管理,并允许逐个用户授予访问权限。
3.速度:通过选择不实现SQL的某些功能,MySQL开发人员可以优先考虑速度。
4.复制:MySQL支持许多不同类型的复制,这是在两个或多个主机之间共享信息的实践,以帮助提高可靠性,可用性和容错能力。这对于设置数据库备份解决方案或横向扩展数据库很有帮助。
缺点
1.已知局限性:由于MySQL是为了提高速度和易用性而不是完全符合SQL的要求而设计的,因此它具有某些功能局限性。例如,它不支持FULL JOIN子句。
2.许可和专有功能:MySQL是双重许可的软件,具有根据GPLv2许可的免费开源社区版本,以及根据专有许可发行的若干付费商业版本。因此,某些功能和插件仅适用于专有版本。
3.开发速度缓慢
适用环境
1.分布式操作:MySQL的复制支持使其成为分布式数据库设置(例如主从或主从体系结构)的理想选择。
2.网站和Web应用程序:MySQL在Internet上为许多网站和应用程序提供支持。这在很大程度上要归功于安装和设置MySQL数据库的简易性,以及长期来看的总体速度和可伸缩性。
3.预期的未来增长:MySQL的复制支持可以帮助促进水平扩展。另外,升级到商业MySQL产品(例如支持自动分片的另一种水平扩展过程MySQL Cluster)的过程相对简单。
不适用环境
1.必须遵守SQL:由于MySQL不会尝试实现完整的SQL标准,因此此工具不完全符合SQL。如果对于您的用例来说,必须完全或什至几乎完全符合SQL要求,则可能要使用更完全兼容的DBMS。
2.并发性和大数据量:尽管MySQL通常在重读操作中表现良好,但并发读写可能会出现问题。如果您的应用程序将有许多用户一次向其写入数据,则另一个PostgreSQL之类的RDBMS可能是更好的数据库选择。
数据库引擎
- InnoDB 支持事务,支持行锁和表锁用的比较多事物完整性较高,适用于频繁更新和删除
- MyISAM不支持事务,只支持表锁。提供高速存储和检索
支持的数据类型
MySQL的数据类型可以分为三大类:数字类型,日期和时间类型以及字符串类型。
优化
执行计划explain
看索引是否用上
最左前置原则
(创建多列索引时,使用最频繁意向放在最左边)
article表如下;
type:
- system 表中只有一条数据
- const针对主键或唯一所以等值扫描,最多只返回一条数据
- ref 通常出现在join查询,针对非唯一或非主键索引,或者使用最左前缀规则索引的查询
- range
extra
using index:覆盖索引扫描
using temporary
using filesort(order by后面的字段顺序和索引中的不符合,则会产生)
慢查询
show variables like '%slow_query%'
去查看是否开启慢查询日志功能
开启慢查询日志,sql执行时间超过该值就会被记录
show profile查看SQL执行时的资源使用情况
索引的实现通常使用 B 树及其变种 B+树
linux系统上
基础操作命令:
- 开启或停止 MySQL 服务 :运行命令 service mysqld start 开启服务;
- 运行命令 service mysqld stop 停止服务
Shell 登入 MySQL: 运行命令 mysql -u root -p
mysql 单机–缓存
变化:
memcached(一套分布式的高速缓存系统)+mysql+垂直拆分–>主从读写分离–>分库分表+水平拆分+集群–>扩展瓶颈–>nosql(用处:为mysql减负)