当前位置: 首页 > 后端技术 > PHP

程序员面试必备PHP中高级面试题-第三天

时间:2023-03-29 21:02:16 PHP

《PHP学习网》公众号每天都会分享一些面试题,找工作的朋友可以来看看。1、简述MongoDB的应用场景。MongoDB支持副本集、索引和自动分片,可以保证高性能和可用性。更高的写入负载默认情况下,MongoDB更关注高数据写入性能而不是事务安全性。MongoDB非常适合业务系统中存在大量“低价值”数据的场景。但是,除非从架构设计上能够保证事务安全,否则应避免在事务安全性较高的系统中使用MongoDB。高可用MongoDB主从集的配置非常简单方便。此外,MongoDB可以快速响应单节点故障,自动安全地完成故障转移。这些特性使MongoDB能够在相对不稳定的(如云主机)环境中保持高可用性。数据量非常大或者将来会变得非常大。根据数据库(MySQL)的特性,很难完成数据扩容。在MySQL中,当单个表达式表达到5-10GB时,会出现明显的性能下降,此时需要通过数据的水平和垂直拆分以及库的拆分来完成扩容。使用MySQL通常需要借助一个驱动层或代理层来完成这样的需求。MongoDB内置了多种数据分片特性,可以很好的满足大数据量的需求。基于位置的数据查询MongoDB支持二维空间索引,因此可以快速准确地获取指定位置的数据。表结构不清晰在一些传统的RDBMS中,增加一个字段会锁定整个数据库/表,或者在执行重负载请求时,会显着降低其他请求的性能。通常发生在数据表大于1G时(大于1TB时更甚)。由于MongoDB是文档数据库,因此向非结构化文档添加新字段是一种快速操作,不会影响现有数据。另一个好处是当业务数据发生变化时,DBA将不再需要修改表结构。2、数据库设计经验,为什么要分表?分馆?一般应该分表多少数据?分馆?分库分表的目的是什么?1、为什么要分表当一个表的数据达到几百万的时候,你查询一次会比较费时间。如果有联合查询,可能会死在那里。分表的目的是减轻数据库的负担,缩短查询时间。在日常开发中,我们经常会遇到大表。所谓大表是指存储了数百万条甚至千万条记录的表。这样的表太大,导致数据库查询和插入的时间太长,性能低下。如果涉及联合查询,性能会更差。分表和表分区的目的是减轻数据库的负担,提高数据库的效率。总的来说就是为了提高增删改查表的效率。数据库中的数据量不一定是可控的。不分库分表,随着时间和业务的发展,数据库中的表会越来越多,表中的数据量也会越来越大。值越大,相应地,数据操作、增删改查的开销也会增加;另外,由于无法进行分布式部署,一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库能够承载的数据量和数据处理能力都会遇到瓶颈。2、分表方案用于mysql集群。可能有人会问mysql集群,根分表是什么关系?虽然不是实际意义上的表分表,但是具有分表的功能。聚类的意义是什么?减轻一个数据库的负担,说白了,就是减少sqlqueuing队列中的sql条数。举个例子:如果有10个sql请求放在一个数据库服务器的排队队列中,他就得等很长时间。10个sql请求分配到5台数据库服务器的排队队列中,一台数据库服务器的队列中只有2个。这是否大大缩短了等待时间?linuxmysqlproxy安装、配置、读写分离mysqlreplication相互主从安装配置、数据同步优点:扩展性好,多表分表后无复杂操作(php代码)缺点:单表数据量残留不变,一次操作耗时还是那么多,硬件开销高。3、简述数据库主从复制,读写分离,什么是主从复制?主从复制用于建立一个与主库完全相同的数据库环境,称为从库;主从复制的原理: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是否收到binarylog并完成操作,不用关心。MYSQL的默认设置。3、半同步复制:master只保证slave中的一个操作成功,返回,其他slave不管。此功能由google为MYSQL引入。关于读写分离,当主从复制完成后,slave需要同步master。所以对于更新数据库的insert/delete/update操作,应该在master中完成。select查询操作落到slave身上。最后大家可以扫描下方二维码关注我公众号,我目前正在更新基础面试题,稍后会更新中高级面试题,redis,liunx面试题