系统架构设计师-案例分析-数据库系统设计
系统架构设计师-案例分析-数据库系统设计ORM技术数据库类型比较缓存技术RedisMemCache分布式锁规范化反规范化技术并发控制封锁协议分布式数据库数据分片数据仓库ORM技术ORMObject-Relational Mapping它在关系型数据库和对象之间作一个映射在具体操作数据库的时候就不需要再去和复杂的SQL语句打交道只需像操作对象一样即可。ORM把数据库映射成对象。如数据库的表——》类记录——》对象字段——》对象的属性ORM的优点使用ORM可以大大降低学习和开发成本程序员不用再写SQL来进行数据库操作减少程序的代码量降低由于SQL代码质量差而带来的影响。ORM的缺点不太容易处理复杂查询语句性能较直接用SQL差。数据库类型比较关系数据库模块与NoSQL模式的特征对比特征关系数据库模式NoSQL模式并发支持支持并发、效率低并发性能高存储与查询关系表方式存储、SQL查询海量数据存储、查询效率高扩展方式向上扩展向外扩展索引方式B树、哈希等键值索引应用领域面向通用领域特定应用领域数据一致性实时一致性弱一致性数据类型结构化数据非结构化事务高事务性弱事务性水平扩展弱强数据容量有限数据海量数据内存数据库与关系型数据库的对比主要数据模型读写性能存储容量可靠性内存数据库键-值对模式内存直接读写性能相对较高基于内存存储存储容量受限恢复机制复杂可靠性较低关系型数据库关系模式外村读写性能相对较低基于存盘存储存储容量大内建恢复机制可靠性较高关系型数据库与文件系统的对比设计难度数据冗余程度数据架构应用扩展性关系型数据库针对特定应用系统设计难度较大遵守数据库范式数据冗余较小以数据库为中心组织管理数据数据库独立于应用系统数据库系统接口标准化易于在不同应用之间共享数据文件系统针对特定应用系统设计难度较小可能在多个文件中复制相同的数据属性数据冗余较大以应用为中心管理数据符合特定应用系统要求的文件数据很难在不同的应用系统之间共享缓存技术RedisRedis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库并提供多种语言的API。Redis数据类型表数据类型存储的值说明应用场景string字符串、整数或浮点数基本类型可用于缓存层、计数器、共享用户Session、分布式锁、分布式系统的全局序列号等。list列表字符串列表可以模拟栈、队列等形式栈、队列、阻塞队列、最新列表等如回复评论、点赞、粉丝列表set无序集合每个值不能重复用户标签、好友/关注/粉丝/感兴趣的人集合、随机展示、黑/白名单、抽奖小程序等hash包括键值对的无序散列表key-value对的一种集合特别适合用于存储对象存储对象、电商购物车等zset有序集合每个元素有一个分数排名如推荐排名前10的热门帖子MemCacheMemCache是一个高性能的分布式的内存对象缓存系统用于动态Web应用以减轻数据库负担。MemCache通过在内存里维护一个统一的巨大的Hash表它能够用来存储各种格式的数据包括图像、视频、文件以及数据库检索的结果等。Redis与MemCache的差异数据类型方面。Redis和Memcache都是将数据存放在内存中都是内存数据库。他们都支持键值对数据类型。同时MemCache还可以用于缓存其他东西如图片、视频等Redis还支持List、Set、Hash等数据结构的存储内存管理机制方面。在Redis中并不是所有的数据都一直存储在内存中的这是和MemCache相比一个最大的区别。当物理内存用完时Redis可以将一些很久没用到的Value交换到磁盘。而在MamCache中数据都是缓存在内存中。数据持久化方面。Redis支持内存数据的持久化而且提供两种主要的持久化策略RDB快照和AOF日志。MemCache不支持数据持久化操作。Redis支持数据的备份即master-slave模式的数据备份。Memcache宕机后数据不可恢复Redis数据丢失后可以通过AOF恢复。Redis与MamCache能力比较特征RedisMemcache数据类型丰富的数据结构简单key/value结构持久化支持不支持分布式存储多种方式主从、哨兵、Cluster等客户端哈希分片/一致性哈希分片多线程支持不支持支持内存管理无私有内存池/内存池事务支持有限支持不支持缓存中的常见问题缓存击穿在高并发访问下被频繁访问的数据项在缓存中失效时大量的并发请求会直接涌入后端存储数据库上导致数据负载增大。缓存可以通过使用互斥锁、分布式锁、热点数据预加载等方式来避免雪崩是指缓存层整体失效导致大量请求涌入后端。雪崩问题可以通过设置不同的过期时间、使用多个独立的缓存集群等来避免。缓存穿透请求查询体格不存在于缓存和数据库中的键。缓存穿透可以使用布隆过滤器来判断请求的键是否有效从而减轻数据库压力。分布式锁分布式锁是是一种在分布式系统环境下通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据从而避免数据的不一致性。实现分布式锁的方式使用MySQL基于唯一索引使用ZooKeeper基于临时有序节点使用Redis基于setnx命令。解决死锁的策略设置锁的超时时间、使用Redlock算法、引入锁的等级、使用一致性哈希算法以及使用锁粒度更小的方式等。规范化不规范化带来的四大问题数据冗余数据被重复存储。修改异常修改导致数据不一致。插入异常删除异常删除了不该删除的数据。反规范化技术规范化设计后数据库设计者希望牺牲部分规范化来提高性能这种从规范化设计的回退方法称为反规范化技术。采用反规范化技术的益处降低连接操作的需求、降低外键和索引的数目还可能减少表的数目能够提高查询效率。可能带来的问题数据的重复存储浪费磁盘空间数据的完整性问题为了保障数据的一致性增加了数据维护的复杂性会降低修改速度增加冗余列在多个表中保留相同的列通过增加数据冗余减少或避免查询时的连接操作。增加派生列在表中增加可以由本表或其他表中数据计算生成的列减少查询的连接操作并避免计算或使用集合函数。重新组表如果许多用户需要查看两个表连接出来的结果数据则把这两个表重新组成一个表来减少连接而提高性能。水平分割表根据一列或多列数据的值把数据放到多个独立的表中主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用。垂直分割表对表进行分割将主键与部分列放到一个表中主键与其他列放到另一个表中在查询时减少I/O次数。并发控制并发操作就是在多用户系统中可能出现多个事务同时操作同一数据的情况。并发操作会导致3种数据不一致问题。丢失更新当两个事务T1和T2读入同一数据做修改并发执行时T1把T2或T2把T1的修改结果覆盖掉造成了数据的丢失更新问题导致数据不一致。不可重复读事务T1读取了数据R事务T2读取并更新了数据R。当事务T1再读取数据R进行核对时得到的两次读取数据不一致。读脏数据事务T1更新了数据R事务T2读取了更新后的数据R事务T1由于某种原因被撤销进行了数据回滚数据R恢复原值事务T2读取了脏数据。造成以上3种数据不一致的主要原因就是事务的并发操作破坏了事务的隔离性。封锁协议并发控制的主要技术是封锁Lock技术。两种封锁协议基本封锁类型特点排他锁X锁事务T对数据A加X锁1只允许事务T读取、修改数据A2只有等该锁解除之后其他事务才能够对数据A加任何锁类型。共享锁S锁解决了X锁太严格不允许其他事务并发读的问题。事务T对数据A加S锁则1只允许事务T读取数据A但不能够修改2可允许其他事务对其加S锁但不允许加X锁。加锁遵循一个基本原则如果该事务只读数据就只加读锁如果该事务要写数据就加写锁。分布式数据库分布式数据库是由一组数据组成的这组数据分布在计算机网络的不同计算机上网络中的每个节点具有独立处理的能力它可以执行局部应用同时每个节点也能通过网络通信子系统执行全局应用。分布式数据库系统是在集中式数据库技术的基础上发展起来的。特点数据独立性。集中与自治共享结合的控制结构。适当增加数据冗余度全局一致性、可串行性和可恢复性分布式数据库的优点分布式数据库可以解决企业部门分散而数据需要相互联系的问题。如果企业需要增加新的相对自主的部门来扩充机构则分布式数据库可以在对当前机构影响最小的情况下进行扩充分布式数据库可以满足均衡负载的需要当企业已存在几个数据库系统而且实现全局应用的必要性增加时就可以由这些数据库自上而下构成分布式数据库系统相对规模的分布式数据库系统在出现故障的概率上不会比集中式数据库系统低但由于其故障的影响仅限于局部数据应用因此就整个系统来说它的可靠性是比较高的。数据分片数据分片将数据库整体逻辑结构分解为合适的逻辑单位然后由分布模式来定义片段及其副本在各场地的物理分布其主要目的是提高访问的局部性有利于按照用户的需求组织数据的分布和控制数据的冗余度。水平分片。水平分片将一个全局关系中元组分裂成多个子集每个子集为一个片段。分片条件由关系中的属性值表示。对于水平分片重构全局关系可通过关系的并操作实现。垂直分片。垂直分片将一个全局关系按属性分裂成多个子集应满足不相交性。对于垂直分片重构全局关系可通过连接运算实现。导出分片。导出分片又称为导出水平分片即水平分片的条件不是本关系属性的条件而是其他关系属性的条件。混合分片。混合分片就是在分片中采用水平分片和垂直分片两种形式的混合。分布透明性是指用户不必关心数据的逻辑分片不必关心数据存储的物理位置分配细节也不必关心局部场地上数据库的数据模型。分片透明性是分布透明性的最高层次它是指用户或应用程序只对全局关系进行操作而不必考虑数据的分片。位置透明。位置透明是指用户或应用程序应当了解分片情况但不必了解片段的存储场地。局部数据模型透明性。局部数据模型透明性是指用户或应用程序应当了解分片及各分片存储的场地但不必了解局部场地上使用的是何种数据模型。数据仓库数据仓库集成是把多种来源的数据集中在一起建立数据仓库所有数据都驻留在单个数据库服务器上配置大型处理器和存储容量。数据仓库主要用于决策支持在数据处理过程中强调分析。其特点是集成的数据、面向主题、数据相对稳定、包含历史信息数据仓库的结构通常包含四个层次数据源是数据仓库系统的基础是整个系统的数据源泉数据的存储与管理是整个数据仓库系统的核心OLAP联机分析处理服务器对分析需要的数据进行有效集成按多维模型组织以便进行多角度、多层次的分析并发现趋势。前端工具主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2469078.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!