当前位置:网站首页>PHP中高级面试题 – 第三天
PHP中高级面试题 – 第三天
2022-08-03 14:42:00 【PHP学习网】
这两天由于感冒,没有积极分享面试题,今天准备的题目也比较少,接下来我的公众号也会分享一些教程,希望可以成为系列教程,这点我得好好思考思考怎么来。
一、简述一下MongoDB的应用场景
mongodb 支持副本集、索引、自动分片,可以保证较高的性能和可用性。
更高的写入负载
默认情况下,MongoDB 更侧重高数据写入性能,而非事务安全,MongoDB 很适合业务系统中有大量 “低价值” 数据的场景。但是应当避免在高事务安全性的系统中使用 MongoDB,除非能从架构设计上保证事务安全。
高可用性
MongoDB 的复副集 (Master-Slave) 配置非常简洁方便,此外,MongoDB 可以快速响应的处理单节点故障,自动、安全的完成故障转移。这些特性使得 MongoDB 能在一个相对不稳定(如云主机)的环境中,保持高可用性。
数据量很大或者未来会变得很大
依赖数据库 (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语句即可。
•主从复制的作用
1.做数据的热备份,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。2.架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问频率,提高单机的I/O性能 3.主从复制是读写分离的基础,使数据库能制成更大 的并发。例如子报表中,由于部署报表的sql语句十分慢,导致锁表,影响前台的服务。如果前台服务使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台的访问速度。
•主从复制的几种方式:
1.同步复制:所谓的同步复制,意思是master的变化,必须等待slave-1,slave-2,...,slave-n完成后才能返回。2.异步复制:如同AJAX请求一样。master只需要完成自己的数据库操作即可。至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。3.半同步复制:master只保证slaves中的一个操作成功,就返回,其他slave不管。这个功能,是由google为MYSQL引入的。
•关于读写分离
在完成主从复制时,由于slave是需要同步master的。所以对于insert/delete/update这些更新数据库的操作,应该在master中完成。而select的查询操作,则落下到slave中。
边栏推荐
- PAT乙级-B1018 锤子剪刀布(20)
- 利用华为云ECS服务器搭建安防视频监控平台【华为云至简致远】
- JS每晚24:00更新某方法
- VMware 虚拟机如何连接网络「建议收藏」
- 面试官都震惊,你这“网络基础”可以啊
- 【常见 error】Vivado 综合出现中断、失败、“PID not specified”
- With 1000 lines of code statistics after the xi 'an housing prices, I have a startling discovery...
- Detailed explanation of cloud hard disk EVS and how to use and avoid pits [HUAWEI CLOUD is simple and far]
- 个人秋招记录——欢迎交流
- 有希望就是好的
猜你喜欢
如何把MapGIS的区文件转为ArcGIS的SHAPE面文件
理解string类
【MATLAB项目实战】基于CNN_SVM的图像花卉识别
A high-performance creation book, ASUS Dreadnought Pro15 2022 is completely enough for daily photo editing and editing!
SQL 不新增表 把一张表定义成两张
WMS软件国内主要供应商分析
With 1000 lines of code statistics after the xi 'an housing prices, I have a startling discovery...
游戏版号“地下交易”,一个版号能卖上千万?
MMA安装及使用优化
彻底搞懂云桌面配置及实践踩坑【华为云至简致远】
随机推荐
ffplay视频播放原理分析
MATLAB中writetimetable函数用法
输出一个整数的二进制形式
MySQL面试必备(一)基础篇
Huffman树
PAT乙级-B1010 一元多项式求导(25)
C语言将GLib库添加到CMake工程中
0代码4步体验物联网设备上云
动作条的多项复选
【指针内功修炼】函数指针 + 函数指针数组 + 回调函数(二)
兆骑科创高层次人才引进平台,创新创业赛事活动路演
6000 字+,帮你搞懂互联网架构演变历程!
A high-performance creation book, ASUS Dreadnought Pro15 2022 is completely enough for daily photo editing and editing!
【报错】ImportError: libpng16-57e5e0a0.so.16.37.0: cannot open shared object file: No such file or direc
varchar2 and varchar2(char)_datetime data types
【报错】import cv2 as cv ModuleNotFoundError: No module named ‘cv2
Leetcode 448. Find All Numbers Disappeared in an Array to Find All Disappeared in an Array of Numbers (simple)
关于 vditor 可否同步飞书文档问题
蚁剑加密 WebShell 过杀软
PAT乙级-B1018 锤子剪刀布(20)