做个自己的影院网站怎么做,济南智能网站建设费用,企业软件定制开发公司,番禺俊才网1、规范化
不满足3NF#xff0c;导致的存储异常
原关系模式 航班#xff08;航班编号#xff0c;航空公司#xff0c;起飞地#xff0c;起飞时间#xff0c;目的地#xff0c;到达时间#xff0c;剩余票数#xff0c;票价#xff09; 代理商#xff08;代理商编号…1、规范化
不满足3NF导致的存储异常
原关系模式 航班航班编号航空公司起飞地起飞时间目的地到达时间剩余票数票价 代理商代理商编号代理商名称客服电话地址负责人 机票代理代理商编号航班编号票价 旅客身份证号姓名性别出生日期电话 购票购票单号身份证号航班编号搭乘日期购票金额 根据业务修改后关系模式 机票代理代理商编号航班编号代理商名称客服电话票价 1数据冗余代理商名称和客服电话存在于两个关系模式而且机票代理关系模式中该代理商代理了多少个航班则代理商名称和客服电话被重复存储多少次。 2更新异常当代理商名称或客服电话变更时不仅需要修改代理商关系模式还需要修改机票代理关系模式否则会造成数据不一致。 反规范化方案 1增加冗余列指在多个表中具有相同的属性列常用来在查询时避免连接操作。 2增加派生列指增加的列可以通过表中其他属性列加工计算生成作用是查询时减少计算量。 3表重组如果需要经常查询两个表连接之后的数据则把这两个表重新组成一个表来减少连接而提高性能。 4表分割通过将较大的表分割为多个较小的表来提高查询性能包括水平分割和垂直分割。 2、不满足3NF存储的不一致解决方案 1通过程序实现当修改代理商关系模式数据时程序同步修改机票代理关系模式 2通过触发器实现在代理商关系模式上加修改触发器当修改代理商关系模式数据时程序同步修改机票代理关系模式。 三种方案 (1)应用程序同步指的是通过应用程序在更新数据的同时同步更新对应的冗余数据这两个操作会放到同一个事务中从而保证两个操作的原子性。 (2)触发器同步触发器是与表事件相关的特殊存储过程它由执行事件来触发由数据库管理系统在后台自动执行。常见的方法是在更新数据的表上增加相应事件的触发器在触发器内容同步更新冗余数据。强一致性 (3)批处理同步对数据一致性要求不高的场景下。 当更新数据操作执行了一段时间后根据更新数据进行批量的同步操作使得冗余数据和更新数据保持一致。 3、仅剩一张机票下两个代理商的操作如下 1第一个代理商能够正确售票。第二个代理商查询剩余票数时正确为l张机票但剩 余票数减一操作时出错因为该机票已经被第一个代理商售出此时第二个代理商无票可售。 2并发操作会带来数据不一致问题具体为丢失修改、读脏数据、不可重复读。 4、读写锁应用 1加写锁 2加读锁 3加写锁 4被阻塞5得到通知 6加写锁 读写锁的缺点读写锁会造成读写操作的互相阻塞实际使得用户的操作被串行化降低了系统的并发性能。设计不好的情况下可能会出现资源的交叉锁定形成死锁。 5、分布式数据库 分布式数据库是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库。每个被连接起来的数据库单元称为站点或节点。 常见实现技术读写分离、数据分片、数据索引、数据缓存、负载均衡等。 6、多读少写场景分布式数据库实现方式 系统应采用的分布式数据库实现方式为一主多从分布、读写分离。 原因在购物网站中读操作远多于写操作在原始的数据库中当写入的时候必须要锁住数据表当小数据量的时候并不会出现瓶颈问题。当数据量暴增时读写数据必然会受到很大的影响。如果把读操作和写操作分离开来性能将大大提高。 6.1、读写分离主从复制的优点 ①避免数据库单点故障主服务器实时、异步复制数据到从服务器当主数据库宕机时可在从数据库中选择一个升级为主服务器从而防止数据库单点故障。 ②提高查询效率根据系统数据库访问特点可以使用主数据库进行数据的插入、删除及更新等写操作而从数据库则专门用来进行数据查询操作从而将查询操作分担到不同的从服务器以提高数据库访问效率。 6.2、基于Mysql binlog分析主从复制的过程 当在从库上启动复制时首先创建I/O线程连接主库 主库随后创建Binlog Dump线程读取数据库事件并发送给I/O线程 I/O线程获取到事件数据后更新到从库的中继日志Relay Log中去 从库上的SQL线程读取中继日志Relay Log中更新的数据库事件并应用。 6.3、主从复制中同步、异步、半同步区别 1同步复制主数据库需要等待所有备数据库均操作成功才可以响应用户影响用户体验。这种方式保证了系统的一致性但牺牲了数据的可用性。 2异步复制当用户请求更新数据时主数据库处理完请求后可直接给用户响应而不必等待备数据库完成同步备数据库会异步进行数据的同步用户的更新操作不会因为备数据库未完成数据同步而导致阻塞。这种方式保证了系统的可用性但牺牲了数据的一致性。 3半同步复制用户发出写请求后主数据库会执行写操作并给备数据库发送同步请求但主数据库不用等待所有备数据库回复数据同步成功便可响应用户也就是说主数据库可以等待一部分备数据库同步完成后响应用户写操作执行成功。 6.4、Redis与Mysql一致性 读数据时先读取Redis中的key,如读到且未失效则返回key对应的数据: 如读不到或key失效则读取数据库并同步Redis; 写数据时先写数据库并设置内存对应的key失效。