当前位置: 首页 > news >正文

求推荐专门做借条的网站最超值的锦州网站建设

求推荐专门做借条的网站,最超值的锦州网站建设,玉田住房和建设局网站,wordpress 浏览器上显示错位之前有不少刚入坑 Java 的粉丝留言#xff0c;想系统的学习一下分库分表相关技术#xff0c;可我一直没下定决心搞#xff0c;眼下赶上公司项目在使用 sharding-jdbc 对现有 MySQL 架构做分库分表的改造#xff0c;所以借此机会出一系分库分表落地实践的文章#xff0c;也…之前有不少刚入坑 Java 的粉丝留言想系统的学习一下分库分表相关技术可我一直没下定决心搞眼下赶上公司项目在使用 sharding-jdbc 对现有 MySQL 架构做分库分表的改造所以借此机会出一系分库分表落地实践的文章也算是自己对架构学习的一个总结。 我在网上陆陆续续的也看了一些有关于分库分表的文章可发现网上同质化的资料有点多而且知识点又都比较零碎还没有详细的实战案例。为了更深入的学习下我在某些平台买了点付费课程看了几节课发现有点经验的人看还可以但对于新手入门来说其实学习难度还是蛮大的。 为了让新手也能看得懂有些知识点我可能会用更多的篇幅加以描述希望大家不要嫌我啰嗦等这分库分表系列文章完结后我会把它做成 PDF 文档开源出去能帮一个算一个吧如果发现文中有哪些错误或不严谨之处欢迎大家交流指正。 具体实践分库分表之前在啰嗦几句回头复习下分库分表的基础概念。 什么是分库分表 其实 分库 和 分表 是两个概念只不过通常分库与分表的操作会同时进行以至于我们习惯性的将它们合在一起叫做分库分表。 分库分表是为了解决由于库、表数据量过大而导致数据库性能持续下降的问题。按照一定的规则将原本数据量大的数据库拆分成多个单独的数据库将原本数据量大的表拆分成若干个数据表使得单一的库、表性能达到最优的效果响应速度快以此提升整体数据库性能。 如何分库分表 分库分表的核心理念就是对数据进行切分Sharding以及切分后如何对数据的快速定位与查询结果整合。而分库与分表都可以从垂直纵向和 水平横向两种纬度进行切分。 下边我们就以订单相关的业务举例看看如何做库、表的 垂直 和 水平 切分。 垂直切分 垂直切分有 垂直 分库 和 垂直分表。 1、垂直分库 垂直分库相对来说是比较好理解的核心理念就四个字专库专用。 按业务类型对表进行分类像订单、支付、优惠券、积分等相应的表放在对应的数据库中。开发者不可以跨库直连别的业务数据库想要其他业务数据对应业务方可以提供 API 接口这就是微服务的初始形态。 垂直分库很大程度上取决于业务的划分但有时候业务间的划分并不是那么清晰比如订单数据的拆分要考虑到与其他业务间的关联关系并不是说直接把订单相关的表放在一个库里这么简单。 在一定程度上垂直分库似乎提升了一些数据库性能可实际上并没有解决由于单表数据量过大导致的性能问题所以就需要配合水平切分方式来解决。 2、垂直分表 垂直分表是基于数据表的列字段为依据切分的是一种大表拆小表的模式。 例如一张 order 订单表将订单金额、订单编号等访问频繁的字段单独拆成一张表把 blob 类型这样的大字段或访问不频繁的字段拆分出来创建一个单独的扩展表 work_extend 这样每张表只存储原表的一部分字段再将拆分出来的表分散到不同的库中。 我们知道数据库是以行为单位将数据加载到内存中这样拆分以后核心表大多是访问频率较高的字段而且字段长度也都较短因而可以加载更多数据到内存中来增加查询的命中率减少磁盘IO以此来提升数据库性能。 垂直切分的优点 业务间数据解耦不同业务的数据进行独立的维护、监控、扩展。在高并发场景下一定程度上缓解了数据库的压力。 垂直切分的缺点 提升了开发的复杂度由于业务的隔离性很多表无法直接访问必须通过接口方式聚合数据。分布式事务管理难度增加。数据库还是存在单表数据量过大的问题并未根本上解决需要配合水平切分。水平切分 前边说了垂直切分还是会存在单库、表数据量过大的问题当我们的应用已经无法在细粒度的垂直切分时 依旧存在单库读写、存储性能瓶颈这时就要配合水平切分一起了水平切分能大幅提升数据库性能。 1、水平分库 水平分库是把同一个表按一定规则拆分到不同的数据库中每个库可以位于不同的服务器上以此实现水平扩展是一种常见的提升数据库性能的方式。 这种方案往往能解决单库存储量及性能瓶颈问题但由于同一个表被分配在不同的数据库中数据的访问需要额外的路由工作因此系统的复杂度也被提升了。 例如下图订单DB_1、订单DB_1、订单DB_3 三个数据库内有完全相同的表 order我们在访问某一笔订单时可以通过对订单的订单编号取模的方式 订单编号 mod 3 数据库实例数 指定该订单应该在哪个数据库中操作。 2、水平分表 水平分表是在同一个数据库内把一张大数据量的表按一定规则切分成多个结构完全相同表而每个表只存原表的一部分数据。 例如一张 order 订单表有 900万数据经过水平拆分出来三个表order_1、order_2、order_3每张表存有数据 300万以此类推。 水平分表尽管拆分了表但子表都还是在同一个数据库实例中只是解决了单一表数据量过大的问题并没有将拆分后的表分散到不同的机器上还在竞争同一个物理机的CPU、内存、网络IO等。要想进一步提升性能就需要将拆分后的表分散到不同的数据库中达到分布式的效果。 水平切分的优点 解决高并发时单库数据量过大的问题提升系统稳定性和负载能力。业务系统改造的工作量不是很大。 水平切分的缺点 跨分片的事务一致性难以保证。跨库的join关联查询性能较差。扩容的难度和维护量较大拆分成几千张子表想想都恐怖。一定规则是什么 我们上边提到过很多次 一定规则 这个规则其实是一种路由算法就是决定一条数据具体应该存在哪个数据库的哪张表里。 常见的有 取模算法 和 范围限定算法 1、取模算法 按字段取模对hash结果取余数 (hash() mod N)N为数据库实例数或子表数量是最为常见的一种切分方式。 还拿 order 订单表举例先对数据库从 0 到 N-1进行编号对 order 订单表中 work_no 订单编号字段进行取模得到余数 ii0存第一个库i1存第二个库i2存第三个库....以此类推。 这样同一笔订单的数据都会存在同一个库、表里查询时用相同的规则用 work_no 订单编号作为查询条件就能快速的定位到数据。 优点 数据分片相对比较均匀不易出现请求都打到一个库上的情况。 缺点 这种算法存在一些问题当某一台机器宕机本应该落在该数据库的请求就无法得到正确的处理这时宕掉的实例会被踢出集群此时算法变成hash(userId) mod N-1用户信息可能就不再在同一个库中了。 2、范围限定算法 按照 时间区间 或 ID区间 来切分比如我们切分的是用户表可以定义每个库的 User 表里只存10000条数据第一个库只存 userId 从1 ~ 9999的数据第二个库存 userId 为10000 ~ 20000第三个库存 userId 为 20001~ 30000......以此类推按时间范围也是同理。 优点 单表数据量是可控的水平扩展简单只需增加节点即可无需对其他分片的数据进行迁移能快速定位要查询的数据在哪个库 缺点 由于连续分片可能存在数据热点比如按时间字段分片可能某一段时间内订单骤增可能会被频繁的读写而有些分片存储的历史数据则很少被查询。 分库分表的难点 1、分布式事务 由于表分布在不同库中不可避免会带来跨库事务问题。一般可使用 三阶段提交 和 两阶段提交 处理但是这种方式性能较差代码开发量也比较大。通常做法是做到最终一致性的方案如果不苛求系统的实时一致性只要在允许的时间段内达到最终一致性即可采用事务补偿的方式。 这里我应用阿里的分布式事务框架Seata 来做分布式事务的管理后边会结合实际案例。 2、分页、排序、跨库联合查询 分页、排序、联合查询是开发中使用频率非常高的功能但在分库分表后这些看似普通的操作却是让人非常头疼的问题。将分散在不同库中表的数据查询出来再将所有结果进行汇总整理后提供给用户。 3、分布式主键 分库分表后数据库的自增主键意义就不大了因为我们不能依靠单个数据库实例上的自增主键来实现不同数据库之间的全局唯一主键此时一个能够生成全局唯一ID的系统是非常必要的那么这个全局唯一ID就叫 分布式ID。 4、读写分离 不难发现大部分主流的关系型数据库都提供了主从架构的高可用方案而我们需要实现 读写分离  分库分表读库与写库都要做分库分表处理后边会有具体实战案例。 5、数据脱敏 数据脱敏是指对某些敏感信息通过脱敏规则进行数据转换从而实现敏感隐私数据的可靠保护如身份证号、手机号、卡号、账号密码等个人信息一般这些都需要进行做脱敏处理。 分库分表工具 我还是那句话尽量不要自己造轮子因为自己造的轮子可能不那么圆业界已经有了很多比较成熟的分库分表中间件我们根据自身的业务需求挑选将更多的精力放在业务实现上。 sharding-jdbc当当TSharding蘑菇街Atlas奇虎360Cobar阿里巴巴MyCAT基于CobarOceanus58同城Vitess谷歌 为什么选 sharding-jdbc sharding-jdbc 是一款轻量级 Java 框架以 jar 包形式提供服务是属于客户端产品不需要额外部署它相当于是个增强版的 JDBC 驱动相比之下像 Mycat 这类需要单独的部署服务的服务端产品就稍显复杂了。况且我想把更多精力放在实现业务不想做额外的运维工作。 sharding-jdbc的兼容性也非常强大适用于任何基于 JDBC 的 ORM 框架如JPA HibernateMybatisSpring JDBC Template 或直接使用的 JDBC。完美兼容任何第三方的数据库连接池如DBCP C3P0 BoneCPDruid HikariCP 等几乎对所有关系型数据库都支持。 不难发现确实是比较强大的一款工具而且它对项目的侵入性很小几乎不用做任何代码层的修改也无需修改 SQL 语句只需配置待分库分表的数据表即可。 总结 简单的回顾一下分库分表的基础知识接下来的文章会配合实战项目介绍 sharding-jdbc 在分库分表中的各个功能点。 原文链接 本文为阿里云原创内容未经允许不得转载。
http://www.pierceye.com/news/631761/

相关文章:

  • 企业数据查询网站word 没有安装wordpress
  • 注册一个设计公司需要多少钱重庆网站建设及优化
  • 青岛企业建设网站公司如何传图片做网站
  • 手机网站源码教程个人博客系统的设计与实现
  • 高端网站改版南京网站如何制作
  • 个人网站建设课程专业彩票网站开发 APP开发
  • 学网站开发首先学哪些基础兰州网站设计哪个平台好
  • 网站后台看不到部分内容桐庐建设局网站
  • 宁夏网站建设费用地址wordpress建站好用吗
  • 微信网站制作哪个好吕梁网站制作
  • 手机怎么制作自己的网站线上运营推广方案
  • 泉州企业制作网站wordpress上传顶部图像
  • php建立网站广州创意设计公司
  • 东营专业网站建设济南天桥区网站建设公司
  • 鹤壁做网站多少钱网站开发 简单留言板
  • 网站建设 阿里东莞seo建站优化公司
  • logo设计竞标网站wordpress攻击跳转
  • 专门做瑜伽的网站wordpress docker镜像
  • 中国航天建设集团有限公司网站wordpress建站 防攻击
  • 买邮箱的网站网站与系统对接图文方案
  • 网页和网站区别wordpress展示企业主题免费
  • 网站制作过程个人网站吗
  • gta5网站建设中温州建设局老网站
  • 凤岗仿做网站专业网站设计制作优化排名
  • 企业网站seo优化德国设计网站大全
  • 重庆网站制作公司电话whois域名查询
  • 六安网站自然排名优化价格自己做网站前端开发
  • 网站发布与推广怎么写广东省城乡建设厅网站
  • 用ipv6地址做网站访问上海网址推广
  • 手把手教你做网站 3北京网站建设是什么