依赖数据库 (MySQL) 自身的特性,完成数据的扩展是较困难的事,在 MySQL 中 , 当一个单达表到 5-10GB 时会出现明显的性能降级 , 此时需要通过数据的水平和垂直拆分、库的拆分完成扩展 , 使用 MySQL 通常需要借助驱动层或代理层完成这类需求 。而 MongoDB 内建了多种数据分片的特性,可以很好地适应大数据量的需求 。
基于位置的数据查询
MongoDB 支持二维空间索引 , 因此可以快速及精确地从指定位置获取数据 。
表结构不明确
在一些传统 RDBMS 中,增加一个字段会锁住整个数据库 / 表,或者在执行一个重负载的请求时会明显造成其它请求的性能降级 。通常发生在数据表大于 1G 的时候(当大于 1TB 时更甚) 。因 MongoDB 是文档型数据库 , 为非结构货的文档增加一个新字段是很快速的操作,并且不会影响到已有数据 。另外一个好处当业务数据发生变化时 , 是将不再需要由 DBA 修改表结构 。
二、数据库设计经验 , 为什么进行分表?分库?一般多少数据量开始分表?分库?分库分表的目的?
1、为什么要分表
当一张表的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了 。分表的目的就在于此,减小数据库的负担,缩短查询时间 。日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表 。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕 。
分表和表分区的目的就是减少数据库的负担 , 提高数据库的效率,通常点来讲就是提高表的增删改查效率 。数据库中的数据量不一定是可控的,在未进行分库分表的情况下 , 随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大 , 相应地,数据操作,增删改查的开销也会越来越大;另外 , 由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈 。
2、分表的方案
做 mysql 集群 , 有人会问 mysql 集群,根分表有什么关系吗?虽然它不是实际意义上的分表,但是它启到了分表的作用 , 做集群的意义是什么呢?为一个数据库减轻负担 , 说白了就是减少 sql 排队队列中的 sql 的数量,举个例子:有 10 个 sql 请求,如果放在一个数据库服务器的排队队列中,他要等很长时间 , 如果把这 10 个 sql 请求,分配到 5 个数据库服务器的排队队列中 , 一个数据库服务器的队列中只有 2 个,这样等待时间是不是大大的缩短了呢?
linux mysql proxy 的安装 , 配置,以及读写分离
mysql replication 互为主从的安装及配置,以及数据同步
优点:扩展性好,没有多个分表后的复杂操作(php 代码)
缺点:单个表的数据量还是没有变,一次操作所花的时间还是那么多 , 硬件开销大 。
三、简述一下数据库主从复制 , 读写分离
* 什么是主从复制
主从复制 , 是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;
* 主从复制的原理:
1.数据库有个bin-log二进制文件,记录了所有的sql语句 。
2.只需要把主数据库的bin-log文件中的sql语句复制 。
3.让其从数据的relay-log重做日志文件中再执行一次这些sql语句即可 。
* 主从复制的作用
推荐阅读
- 应用部署服务器,app部署服务器
- chatgpt前端页面,前端 页面
- ios开发者测试版和公开测试版,ios开发者测试版和公测版哪个好
- 手写设计签名直播软件,在线手写签名生成器
- 网页的mysql怎么启动 mysql 网页用户界面
- 安卓墨迹天气安装,下载安装墨迹天气预报并安装到桌面上
- 计算机毕业设计用开源项目,计算机毕设资源
- 贺兰县域电商如何发展,县域电商的发展模型有哪些
- vb.net模拟输入 vb语言