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

银行网站建设方案绵阳做绵阳做网站网站

银行网站建设方案,绵阳做绵阳做网站网站,wordpress 联系我们 制作,在线免费网站排名优化随着互联网应用的不断发展和用户量的不断增加,传统的数据库在应对高并发和大数据量的场景下面临着巨大的挑战。为了解决这一问题,分库分表成为了一个非常流行的方案。分库分表主流的技术包括MyCat和Sharding JDBC。我们来通过一张图来了解这两者有什么区…

随着互联网应用的不断发展和用户量的不断增加,传统的数据库在应对高并发和大数据量的场景下面临着巨大的挑战。为了解决这一问题,分库分表成为了一个非常流行的方案。分库分表主流的技术包括MyCat和Sharding JDBC。我们来通过一张图来了解这两者有什么区别:

从上图可以看到,MyCat是一个单独的中间件,读者朋友们可以把它理解为一个数据库(不过它不是数据库哦,只是对于应用端来说连接使用MyCat和数据库是一样的,对应用程序来说,不需要关心具体是数据库还是MyCat;而Sharding JDBC则是整合到应用端的,它运行在应用端,和代码的耦合性相对MyCat来说要更高)。本文笔者将深入探索Sharding JDBC,介绍其核心概念、工作原理以及使用方法,并通过一个示例帮助读者更好地理解和应用Sharding JDBC。

1. 什么是Sharding JDBC?

Sharding JDBC是一款基于Java的开源中间件,用于简化分库分表的操作和管理。它提供了一套统一的接口和封装,屏蔽了底层数据库的细节,让开发者可以像使用单一数据库一样操作分布式数据库。

2. Sharding JDBC的核心概念

2.1 数据库切片(Sharding)

数据库切片是指将一个大型数据库按照某种规则拆分成多个较小的数据库实例,每个数据库实例称为一个切片。切片可以根据不同的规则进行拆分,如按照用户ID、地域等进行划分。

2.2 分布式表(Sharding Table)

分布式表是指将一个表按照某种规则拆分成多个子表,每个子表存储了相同表结构的不同数据。通常,分布式表的拆分规则与数据库切片的规则相一致。

2.3 数据库路由(Database Sharding)

数据库路由是指根据某种规则将数据库的操作路由到对应的数据库切片上。Sharding JDBC提供了路由策略的配置,可以根据业务需求进行灵活的配置。

2.4 表路由(Table Sharding)

表路由是指根据某种规则将数据操作路由到对应的分布式表上。Sharding JDBC同样提供了灵活的表路由策略配置,支持多种分表策略。

3. Sharding JDBC的工作原理

简单来说,Sharding JDBC的工作原理可以概括为以下几个步骤:

  • 客户端发起数据库操作请求。
  • Sharding JDBC根据路由策略解析请求,确定对应的数据库切片和分布式表。
  • Sharding JDBC将请求转发给对应的数据库切片和分布式表。
  • 数据库切片和分布式表执行具体的数据库操作。
  • 结果返回给Sharding JDBC,再由Sharding JDBC返回给客户端。

Sharding JDBC通过对数据库操作的解析和转发,实现了透明的分库分表功能,对上层应用透明,使得应用无需关心分布式数据库的复杂性。

4. 如何使用Sharding JDBC?

接下来,我们一起来看下如何使用。使用Sharding JDBC可以分为以下几个步骤:

4.1 引入Sharding JDBC依赖

在项目的pom.xml文件中引入Sharding JDBC的相关依赖,以及对应的数据库驱动依赖。

4.2 配置数据源和数据库规则

在配置文件中配置数据源和数据库规则,包括数据库连接信息、数据库切片和分布式表的规则等。

4.3 编写业务代码

编写业务代码时,使用Sharding JDBC提供的API进行数据库操作,无需关心具体的数据库切片和分布式表。

下面笔者根据上述步骤,以一个例子来详细展示具体的使用方法:

我们以用户表和订单表为例,对其分库分表。

A.引入Sharding JDBC依赖,可以通过Maven来管理项目依赖。

<dependency><groupId>io.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>xxx</version>
</dependency>

B.配置数据源和数据库规则,在application.yaml中进行配置。

spring:shardingsphere:datasource:# 数据源配置,定义两个数据源names: ds0, ds1ds0:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/database0username: rootpassword: rootds1:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/database1username: rootpassword: rootsharding:tables:# 订单表的配置order:actualDataNodes: ds${0..1}.order_${0..3}# 表路由策略,根据用户ID进行分表tableStrategy:standard:shardingColumn: user_idpreciseAlgorithmClassName: com.example.algorithm.PreciseModuloTableShardingAlgorithm# 数据库路由策略,根据用户ID进行分库databaseStrategy:standard:shardingColumn: user_idpreciseAlgorithmClassName: com.example.algorithm.PreciseModuloDatabaseShardingAlgorithm

C.编写自定义的分表策略和分库策略。例如,我们自定义了

PreciseModuloTableShardingAlgorithm和PreciseModuloDatabaseShardingAlgorithm两个算法类,根据用户ID进行分表和分库的计算。

public class PreciseModuloTableShardingAlgorithm implements PreciseShardingAlgorithm<Long> {@Overridepublic String doSharding(Collection<String> tableNames, PreciseShardingValue<Long> shardingValue) {for (String tableName : tableNames) {if (tableName.endsWith(String.valueOf(shardingValue.getValue() % 4))) {return tableName;}}throw new IllegalArgumentException("Unsupported table name: " + shardingValue.getLogicTableName());}
}public class PreciseModuloDatabaseShardingAlgorithm implements PreciseShardingAlgorithm<Long> {@Overridepublic String doSharding(Collection<String> databaseNames, PreciseShardingValue<Long> shardingValue) {for (String databaseName : databaseNames) {if (databaseName.endsWith(String.valueOf(shardingValue.getValue() % 2))) {return databaseName;}}throw new IllegalArgumentException("Unsupported database name: " + shardingValue.getLogicTableName());}
}

D. 编写业务代码,使用Sharding JDBC进行数据库操作。

@Repository
public class OrderRepository {@Autowiredprivate JdbcTemplate jdbcTemplate;public List<Order> findOrdersByUserId(Long userId) {String sql = "SELECT * FROM `order` WHERE user_id = ?";return jdbcTemplate.query(sql, new Object[]{userId}, new BeanPropertyRowMapper<>(Order.class));}public void saveOrder(Order order) {String sql = "INSERT INTO `order` (id, user_id, amount) VALUES (?, ?, ?)";jdbcTemplate.update(sql, order.getId(), order.getUserId(), order.getAmount());}
}@Service
public class OrderService {@Autowiredprivate OrderRepository orderRepository;public List<Order> getOrdersByUserId(Long userId) {return orderRepository.findOrdersByUserId(userId);}public void saveOrder(Order order) {orderRepository.saveOrder(order);}
}

在上述示例中,我们配置了两个数据源(ds0和ds1),每个数据源对应一个数据库实例。订单表根据用户ID进行分表,共分为4张表(order_0、order_1、order_2、order_3),并根据用户ID进行分库,共分为2个数据库实例。在业务代码中,我们通过Sharding JDBC的API来进行数据库操作,无需关心具体的数据库切片和分布式表。

本文深入探索了Sharding JDBC的核心概念、工作原理和使用方法,并通过一个用户订单分库分表的示例加以完善。通过使用Sharding JDBC,开发者可以轻松应对高并发和大数据量的场景,提升系统的性能和可扩展性。希望本文对读者理解和应用Sharding JDBC有所帮助。

相关内容拓展:(技术前沿)

开发语言作为软件搭建的底层,长久以来一直使用英文编程,Java、C 等语言对于专业程序员来说并不难,然而许多非 IT 专业的人,希望搭建出适合自己使用的软件,却被晦涩难懂的英文编程阻拦在外。

所幸的是,自 2000 年以来,低代码领域虽然在夹缝中艰难生存,但是经历 20 年风雨,如今却已柳木成荫,相关领域企业超过百家,近年如火如荼的“JNPF 平台”更是低代码界的一匹黑马。

JNPF 平台由具备 10 多年系统开发经验和企业项目交付经验的技术团队倾力打造而成的企业级低代码平台。支持多国语言切换搭建界面,业务流程只需要“拖拉拽”方式、少量或完全不需要编写代码即可搭建,操作起来就像搭积木一样简单,会玩电脑就可以开发软件。

核心功能:表单引擎、可视化引擎、BI引擎、流程引擎、权限引擎、门户引擎、大屏引擎、接口中心、物联平台

如果那你未曾尝试过这个领域,你或许可以试试看!官网:https://www.jnpfsoft.com/?csdn

http://www.yayakq.cn/news/512496/

相关文章:

  • 黑龙江恒泰建设集团网站专业网络优化
  • 甘肃住房和城乡建设局网站如今做哪个网站能致富
  • 国外企业网站建设模型用python做网站的公司
  • 免费教做面食的网站专业的网站优化
  • 滨州市滨城区建设局网站阳江 网站建设
  • 好的h5制作网站模板网页设计主题推荐
  • 手机网站开发公司电话网站浏览历史记录恢复方法是什么
  • 网站开发学习方法wordpress主题 ftp
  • 公司网站有时登不进 服务器怎么做自己的网站链接
  • 青岛网站制作开发沈阳网页关键词优化
  • 电脑报网站建设猪八戒 网站开发支付
  • 专门做房产的网站做网站完整视频
  • 把网站做静态化是什么意思网站建设发言
  • 网站开发下载注册网站主体想找回备案如何做
  • 芦苞网站建设扁平化设计 科技感网站素材
  • 宁波网站建设制作的公司商标设计与制作
  • 企业网站整理优化沈阳紧急通知
  • 网站设置安全南宁seo推广优化
  • 自己做网站可以上传软件甘肃建设厅官方网站
  • 自己做的网站用别的电脑怎么访问电商网站商品表设计方案
  • 网站建设招标网网架加工方案
  • 成功网站建设案例计算机网络应用主要学什么
  • 广州seo网站推广聊城pc网站建设软件
  • 做外国人的生意哪家网站好怎么制作安卓app
  • 企业网站设计好的缺点有哪些安卓app上架费用
  • 上海网站建设机构app的开发需要哪些费用
  • 企业网站建设公司哪家好字体设计赏析
  • 在网站设计公司上班好吗软件工程师招聘简章pdf
  • 老年夫妻做爰视频网站盐城网站建设策划方案
  • 琳琅秀网站建设网站建设php实验报告