1、分布式数据库
1)请用300字以内的文字简述分布式数据库跟集中式数据库相比的优点。
(1)坚固性好。由于分布式数据库系统在个别结点或个别通信链路发生故障的情况下,它仍然可以降低级别继续工作,系统的坚固性好,可靠性和可用性好。
(2)可扩充性好。可根据发展的需要增减结点,或对系统重新配置,这比用一个更大的系统代替一个已有的集中式数据库要容易得多。
(3)可改善性能。在分布式数据库中可按就近分布,使大部分数据可以就近访问,避免了集中式数据库中的瓶颈问题,减少了系统的响应时间,提高了系统的效率,而且也降低了通信费用。
(4)自治性好。数据可以分散管理,统一协调,即系统中各结点的数据操纵和相互作用是高度自治的,不存在主从控制。
2)分布透明性是指用户不必关心数据的逻辑分片,不必关心数据存储的物理位置分配细节,也不必关心局部场地上数据库的数据模型。分布透明性包括哪三种透明性。
分片透明性、位置透明性和局部数据模型透明性【逻辑透明】。
3)数据表进行分片设计。一般有四种分片方法:
(1)水平分片(2)垂直分片(3)导出分片(4)混合分片
4)分布式数据库中各局据库应满足集中式数据库的基本需求,除此以外还应保证数据库的全局数据(一致性 )、并发操作的可串行性和故障的全局可恢复性。
2、数据库索引
①如果建立索引不当,数据库管理系统将不利用已经建立的索引,而采取全表扫描。
②当更新操作成为系统瓶颈时,因为每次更新操作会重建表的索引,则需要考虑删除某些索引。
③应该针对不同应用情况选择适当的索引类型。例如,如果经常使用范围查询,则B树索引比散列索引更加高效。
④应该将有利于大多数据查询和更新的索引设为聚类索引。
⑤需要对建立的索引进行实际的测试,因为索引的使用是由数据库管理系统(数据库优化器)决定的。
2)列举出4条SQL语句优化的基本策略
①建立物化视图或尽可能减少多表查询。
②以不相干子查询替代相干子查询。
③只检索需要的列。
④用带IN的条件子句等价替换OR子句。
⑤经常提交COMMIT,以尽早释放锁。
⑥避免嵌套的游标(Cursor)和多重循环等
3、数据架构
张工认为应该采用集中式的数据架构,给出的理由是结构简单、易维护且开发及运行成本低;
刘工建议采用分布式的数据架构,并提出在开发中通过“局部数据库+缓存”的读写分离结构实现,具有较好的运行性能和可扩展性。
1)说明张工和刘工提出的数据架构的基本思想
(1)张工提出的集中式数据架构是由一个处理器、与它相关联的数据存储设备以及其他外围设备组成,它被物理地定义到单个位置。系统提供数据处理能力,用户可以在同样的站点上操作,也可以在地理位置隔开的其他站点上通过远程终端来操作。系统及其数据管理被某个或中心站点集中控制。
(2)刘工提出的分布式数据架构使用多个计算机系统上的多个局部数据库系统构成,数据可以在多个不同的局部数据库中进行传送,由不同的数据库管理系统软件进行管理,运行在多种不同的计算机上,支持多种不同的操作系统。这些机器位于(或分布在)不同的地理位置并通过多种通信网络连接在一起。企业数据可以分布在不同的计算机上,一个应用程序可以操作位于不同地理位置的机器上的数据。
2)如何实现刘工建立CRSS的数据库系统,数据可以分布在不同的计算机上,一个应用程序可以操作位于不同地理位置的机器上的数据。
分布式数据库系统需要由多个局部数据库系统、多个热备份数据库系统和多个数据缓存组成。局部数据库负责数据的写入,多个热备份数据库系统用以解决单点故障的问题,数据缓存负责为应用提供所读取的数据。
3)对于数据的读取、添加、更改和删除操作分别如何实现。
(1)读取数据:应用访问缓存,如果命中则返回,否则从局部数据库系统中读取数据并将数据加载到缓存后返回。
(2)添加数据:采用延迟加载策略,应用将数据直接写入局部数据库。
(3)更改数据:应用更改局部数据库中的数据,将缓存中的数据标记为失效。
(4)删除数据:应用删除局部数据库中的数据,将缓存中的数据标记为失效。
4)分别说明在集中式和分布式数据架构下,可以采用哪些方法提升系统的可扩展性。
张工提出的集中式数据架构通过向上扩展(Scale Up)提升系统的可扩展性。具体的实现方式包括硬件扩容(增加CPU数量、内存容量、磁盘数量)和硬件升级(更换为高端主机或高速磁盘等)。
刘工提出的分布式数据架构通过向外扩展(Scale Out)提升系统的可扩展性。具体的实现方式包括数据复制、数据垂直切分(或/和)水平切分、缓存和全文搜索。
4、读写分离
1)简述主从复制给系统带来的好处。
①避免数据库单点故障:主服务器实时、异步复制数据到从服务器,当主数据库宕机时,可在从数据库中选择一个升级为主服务器,从而防止数据库单点故障。
②提高查询效率:根据系统数据库访问特点,可以使用主数据库进行数据的插入、删除及更新等写操作,而从数据库则专门用来进行数据查询操作,从而将查询操作分担到不同的从服务器以提高数据库访问效率。
2)My SQL 数据库中,主从复制是通过 binary log 来实现主从服务器的数据同步。请简述主从复制的过程。
当在从库上启动复制时,首先创建I/O线程连接主库,
主库随后创建Binlog Dump线程读取数据库事件并发送给I/O线程,
I/O线程获取到事件数据后更新到从库的中继日志Relay Log中去,
从库上的SQL线程读取中继日志Relay Log中更新的数据库事件并应用。
3)主从复制可以采用同步、异步、半同步复制。请简述每种复制技术的特点。
(1)同步复制主数据库需要等待所有备数据库均操作成功才可以响应用户,影响用户体验。这种方式保证了系统的一致性,但牺牲了数据的可用性。
(2)异步复制:当用户请求更新数据时,主数据库处理完请求后可直接给用户响应,而不必等待备数据库完成同步,备数据库会异步进行数据的同步,用户的更新操作不会因为备数据库未完成数据同步而导致阻塞。这种方式保证了系统的可用性,但牺牲了数据的一致性。
(3)半同步复制:用户发出写请求后,主数据库会执行写操作,并给备数据库发送同步请求,但主数据库不用等待所有备数据库回复数据同步成功便可响应用户,也就是说主数据库可以等待一部分备数据库同步完成后响应用户写操作执行成功。
5、缓存一致性
1.根据key读缓存;
2.读取成功则直接返回;
3.若key不在缓存中时,根据key (读数据库) ;
4.读取成功后,(更新缓存) ;
5.成功返回。
写数据操作的基本步骤:
1.根据key值写 (数据库) ;
2.成功后 (更新/删除缓存Key值/使缓存Key值失效) ;
3.成功返回。 .
主从复制模式、哨兵(sentinel)模式、集群(Cluster)模式。
String类型可用于缓存层或计数器,如视频播放量、文章浏览量等。Hash类型可用于描述用户信息。list类型可用于回复评论、点赞。Zset类型可用于数据排名。
6、反规范化
常见的反规范化方法有:
1、增加冗余列:增加冗余列是指在多个表中具有相同的列,它常用来在查询时避免连接操作。
2、增加派生列:增加派生列指增加的列可以通过表中其他数据计算生成。它的作用是在查询时减少计算量,从而加快查询速度。
3、重新组表:重新组表指如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能。
4、水平分割表:按记录进行分割,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。
5、垂直分割表:对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中, 在查询时减少 I/0 次数。