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

网站服务器是干什么的一级域名 二级域名 目录网站推广

网站服务器是干什么的,一级域名 二级域名 目录网站推广,服务器怎么租用,创意的广告图片文章目录 前言多租户的四种实现方案单数据源多数据库实现思路代码实现 总结 前言 多租户#xff08;Multi-Tenancy#xff09;是一种软件架构设计模式#xff0c;旨在使单个应用程序可以同时为多个租户#xff08;如不同组织、用户或客户#xff09;提供服务#xff0c;… 文章目录 前言多租户的四种实现方案单数据源多数据库实现思路代码实现 总结 前言 多租户Multi-Tenancy是一种软件架构设计模式旨在使单个应用程序可以同时为多个租户如不同组织、用户或客户提供服务每个租户都拥有独立的数据和配置并且彼此之间相互隔离。实现多租户架构可以帮助企业降低成本、简化管理并提高效率。 在设计多租户系统之前我们需要明确业务需求和预期目标。是否希望租户之间完全隔离还是允许一些共享资源我们需要考虑以下几个方面 数据隔离每个租户的数据应该彼此隔离不同租户之间不能直接访问或共享数据。可以通过使用独立的数据库或者使用数据表中的租户ID进行区分来实现数据隔离。 身份认证与授权多租户系统需要支持各个租户的身份认证和授权确保只有合法的用户能够访问自己所属的租户资源。 水平扩展多租户系统可能会面临大量用户和数据增长的挑战因此需要具备水平扩展的能力以保持系统的高性能和可靠性。 配置管理每个租户可能有不同的配置需求例如与邮件、支付和存储等集成的参数设置。因此应该提供一种可灵活配置的机制使租户能够根据自己的需求进行定制。 安全性和隔离多租户系统需要确保租户之间的安全隔离以防止潜在的数据泄露和访问冲突。在设计系统时应考虑到对于敏感数据的保护和各种攻击的预防。 资源利用率为了提高资源利用率可以考虑共享某些通用的资源如计算资源、存储空间和网络带宽。这样可以减少成本并提供更高的效率。 多租户的四种实现方案 常见的设计方案大致分为4种 1、所有租户使用同一数据源下同一数据库下共同数据表单数据源单数据库单数据表 2、所有租户使用同一数据源下同一数据库下不同数据表单数据源单数据库多数据表 3、所有租户使用同一数据源下不同数据库下不同数据表单数据源多数据库多数据表 4、所有租户使用不同数据源下不同数据库下不同数据表多数据源多数据库多数据表 第一、二种相对来说比较简单。我们本文主要对第三种展开讲解 单数据源多数据库 多租户的最终目的就是要实现数据隔离在但数据源多数据库中也就是当有了一个新的租户要进行注册的时候要实现去创建一个数据库和对应的数据库表。 现在就有了问题应该如何去动态的去创建数据库呢 实现思路 1、创建数据库可以数用传统的方式通过sql语句去创建 2、创建数据库表在创建完数据库之后使用sql语句去创建表 下文的代码中使用了读取xml文件中的sql去创建 代码实现 在resources下创建一个xml文件 ?xml version1.0 encodingUTF-8? documentstatementnamecreate-tenant/namescriptDROP DATABASE IF EXISTS sys_user${tenant_id};CREATE DATABASE ${database};USE ${database};CREATE TABLE sys_user (user_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 用户ID,dept_id bigint(20) DEFAULT NULL COMMENT 部门ID,user_name varchar(30) NOT NULL COMMENT 用户账号,nick_name varchar(30) NOT NULL COMMENT 用户昵称,user_type varchar(2) DEFAULT 00 COMMENT 用户类型00系统用户,email varchar(50) DEFAULT COMMENT 用户邮箱,phonenumber varchar(11) DEFAULT COMMENT 手机号码,sex char(1) DEFAULT 0 COMMENT 用户性别0男 1女 2未知,avatar varchar(100) DEFAULT COMMENT 头像地址,password varchar(100) DEFAULT COMMENT 密码,status char(1) DEFAULT 0 COMMENT 帐号状态0正常 1停用,del_flag char(1) DEFAULT 0 COMMENT 删除标志0代表存在 2代表删除,login_ip varchar(128) DEFAULT COMMENT 最后登录IP,login_date datetime DEFAULT NULL COMMENT 最后登录时间,create_by varchar(64) DEFAULT COMMENT 创建者,create_time datetime DEFAULT NULL COMMENT 创建时间,update_by varchar(64) DEFAULT COMMENT 更新者,update_time datetime DEFAULT NULL COMMENT 更新时间,remark varchar(500) DEFAULT NULL COMMENT 备注,auth_id varchar(30) DEFAULT NULL COMMENT 其他项目用户id积分,ding_id varchar(50) DEFAULT NULL COMMENT 用户dingid,tenant_id varchar(100) DEFAULT NULL COMMENT 公司id,open_id varchar(50) DEFAULT NULL COMMENT 微信用户唯一标识,PRIMARY KEY (user_id) USING BTREE) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8mb4 ROW_FORMATDYNAMIC COMMENT用户信息表;/script/statement /document这是对应的创建数据库的语句。 获取xml文件中信息 Component public class ExecSqlConfig {private final MapString, String sqlContainer new HashMap();public ExecSqlConfig() throws Exception {// 1.创建Reader对象SAXReader reader new SAXReader();// 2.加载xmlInputStream inputStream new ClassPathResource(create-library.xml).getInputStream();Document document reader.read(inputStream);// 3.获取根节点Element root document.getRootElement();// 4.遍历每个statementListElement statements root.elements(statement);for (Element statement : statements) {String name null;String sql null;ListElement elements statement.elements();// 5.拿到name和script加载到内存中管理for (Element element : elements) {if (name.equals(element.getName())) {name element.getText();} else if (script.equals(element.getName())) {sql element.getText();}}sqlContainer.put(name, sql);}}public String get(String name) {return sqlContainer.get(name);}} sql执行脚本 在脚本中去读取了ExecSqlConfig 文件中的信息 Component public class ExecSqlUtil {Autowiredprivate ExecSqlConfig execSqlConfig ;Autowiredprivate DataSource dataSource ; /*** description: 把模板中的数据库名称替换为新租户的名称* author: * date: 2023/9/27 15:05* param: [name , replaceMap]* return: void**/SneakyThrowspublic void execSql(String name, MapString, String replaceMap) {try {// 获取SQL脚本模板String sql execSqlConfig.get(name);// 替换模板变量for (Map.EntryString, String entity : replaceMap.entrySet()) {sql sql.replace(entity.getKey(), entity.getValue());}ScriptRunner scriptRunner new ScriptRunner(dataSource.getConnection());// 执行SQLscriptRunner.runScript(new StringReader(sql));}catch (Exception e){e.printStackTrace();}}}业务逻辑 public void addTenantLibrary(TanentModel tanentModel) {try {if (!(tanentModel.getDescription().isEmpty()||tanentModel.getTenantContact().isEmpty()||tanentModel.getTel().isEmpty()||tanentModel.getTenantName().isEmpty())){//判断数据源中是否已经存在该数据库int flag tantentMapper.insertTantentAdmin(tanentModel.getTenantName());if (flag0){throw new Exception(已存在该数据库);}else {MapString,String mapnew HashMap();map.put(${database},tanentModel.getTenantName());map.put(${project_name},tanentModel.getTenantName());map.put(${leader},tanentModel.getTenantContact());map.put(${phone},tanentModel.getTel());map.put(${description},tanentModel.getDescription());execSqlUtil.execSql(create-tenant,map);}}}catch (Exception e){e.printStackTrace();throw new RuntimeException(e.getMessage()); // 将异常信息作为响应的一部分返回给前端}}在业务逻辑的代码中map.put(“${database}”,tanentModel.getTenantName());是替换的xml文件中的变量 总结 在多租户架构中单数据源多数据库是一种常见的实现方案。通过使用不同的数据库实例或者数据库模式我们可以实现对每个租户独立的数据存储并保持彼此之间的隔离性。在本文中我们讨论了单数据源多数据库的实现方案和一些关键考虑因素。 总结而言单数据源多数据库方案为多租户系统提供了以下优势 数据隔离每个租户拥有独立的数据库数据之间互不干扰确保了租户数据的隔离性和安全性。 性能优化通过将租户数据分散到多个数据库中可以减轻单一数据库的负载压力提高系统的性能和吞吐量。 扩展性当租户数量增加时可以通过新增数据库实例或者数据库服务器来水平扩展系统以满足不断增长的业务需求。 容错性单数据源多数据库方案降低了租户之间的相互影响当某个数据库发生故障时其他数据库仍然可以正常运行提高了系统的容错性和可用性。 在实施单数据源多数据库方案时我们需要注意以下几个关键因素 数据迁移和同步对于已有的多租户系统将现有数据迁移到新的数据库中可能需要一定的工作量。同时为保持数据的一致性我们需要确保数据在多个数据库之间的同步。 租户管理和路由策略需要实现租户的动态管理和路由策略确保每个请求能够正确地路由到对应的数据库。这可以通过维护租户-数据库映射关系或者使用中间件进行请求路由来实现。 数据库连接和资源管理在系统设计中需要考虑数据库连接的管理和资源分配。合理配置数据库连接池以及优化数据库查询等操作可以提高系统的性能和资源利用率。 安全性和权限控制在设计数据库架构时需要考虑安全性和权限控制的需求。确保不同租户之间的数据访问和操作是受限的并遵循数据隐私与保护的法律规定。 综上所述单数据源多数据库是实现多租户系统的一种有效方案它提供了良好的数据隔离、性能优化和扩展性。然而在实施过程中需要综合考虑数据迁移、租户管理、资源管理和安全性等因素以确保系统的稳定性和可靠性。通过合理的设计和实施单数据源多数据库方案可以为多租户系统提供高效、安全且可扩展的数据存储解决方案。
http://www.pierceye.com/news/912444/

相关文章:

  • 陕西西安网站建设公司源码编程器
  • 网站开发的前端技术有哪些软件制作是什么专业
  • 淘宝网站建设目标是什么意思厦门seo计费
  • 高端网站建设注意简述网络营销的基本方法
  • html5网站开发实例教程沈阳软件定制开发公司
  • 做透水砖的网站下载爱南宁乘车
  • 免费建设工程信息网站许昌市建设路小学网站
  • 网站建设公司华网天如何设置自己的网址
  • 株洲做网站那家好黑龙江网站设计
  • 培训视频网站百度权重划分等级
  • 重庆江北区网站建设怎么查询网站建设时间
  • 做网站一个月能挣多少怎么做营销推广
  • 网站做镜像检查漏洞网站建设需要哪些步骤
  • 广州手机建设网站wordpress 读者墙
  • 大桥石化集团网站谁做的wordpress建站吗
  • 手机行业网站做网站用什么环境
  • 百度做网站刷排名国外做图标网站
  • 常州好的网站设计公司企业策划方案怎么做
  • 厂房出租做推广什么网站好网站做自适应的好处
  • 网站木马文件删除青岛黄岛网站建设公司电话
  • 一个网站做网站地图的目的企业网站建设框架图
  • 网站建设 swot分析深圳市龙华区繁华吗
  • h5 小米网站模板直接通过ip访问网站
  • 公司建设个网站制作装饰公司网站
  • 高质量的网站内容建设做网站信科网站建设
  • 网站建设倒计时模板学校室内设计效果图
  • 海东营销网站建设公司东莞网络优化排名
  • 株洲网站建设服务建筑公司怎么注册
  • 心理学网站的建设网站开发公司比较有名
  • 需要做网站设计海南网页制作