本发明涉及计算机软件开发技术领域,特别涉及一种基于mycat的数据库多租户实现方法。
背景技术:
随着互联网技术的迅速发展,软件产品及服务也经历了翻天覆地的变化。相对于传统软件服务模式,saas(software-as-a-service,软件即服务)大幅降低了企业信息化成本,使企业集中精力投入到经营活动中,而多租户是saas服务模式区别于传统软件模式的最本质区别。
多租户是一种软件架构技术,是一种探讨与实现如何在多用户环境下共用相同的系统或程序组件,并且可确保各用户间数据的隔离性。
针对上述情况,本发明提出了一种基于mycat的数据库多租户实现方法,在保障数据隔离性的同时实现在多用户环境下共用相同的系统或程序组件。
技术实现要素:
本发明为了弥补现有技术的缺陷,提供了一种简单高效的基于mycat的数据库多租户实现方法。
本发明是通过如下技术方案实现的:
一种基于mycat的数据库多租户实现方法,其特征在于:封装登录接口,根据用户名与密码获取所属的业务库tenant,返回的tenant作为访问其他业务的第一参数;封装控制层拦截器,用户登录成功后获取到了业务库tenant,所有业务访问前将tenant传递给控制层拦截器;封装业务承载接口,利用sql拦截器与mycat提供的注解改写sql语句,mycat代理在解析时会自动路由到tenant业务库上执行sql语句。
具体包括以下步骤:
(1)用户在注册产品时,根据注册用户名生成唯一的租户id,同时分配用户所属业务库并生成所属业务库标识tenant;
(2)用户登录时,通过用户名获取租户id,再通过租户id获取该用户所属的业务库标识tenant;
(3)用户登录成功后,将所属业务库标识tenant与会话信息一起存储;
(4)利用mycat注解改写sql语句,使sql语句在解析时自动路由到业务库上。
所述步骤(1)具体包括以下步骤:
(a)用户在注册产品时,根据录入的用户名自动创建与用户名绑定的唯一租户id并存储数据库;
(b)根据用户名生成租户id后,自动分配与租户id绑定的所属业务库并生成所属业务库标识tenant存储到数据库,所属业务库标识tenant用于每次用户登录后获取使用。
所述步骤(2)中,用户登录软件时,通过用户名获取租户id,再通过租户id查询基础库配置映射关系获取登录用户所属业务库标识tenant。
所述步骤(3)中,用户登录成功并获取到所属业务库后,将所属业务库标识tenant存储于session(会话)或cookie(储存在用户本地终端上的数据),便于访问其他业务时获取所属业务库标识tenant。
所述步骤(4)具体包括以下步骤:
(a)封装sql拦截器并利用mycat提供的注解,改写sql语句sql="/*!mycat:schema="+tenant+"*/"+sql;
(b)mycat在解析时,会自动路由到tenant业务库上执行sql语句完成业务处理。
本发明的有益效果是:该基于mycat的数据库多租户实现方法,可以让多个用户共用一套应用程序,在保证数据隔离与安全性的同时可以有效降低企业信息化成本、降低软件供应商的环境配置成本与运维成本。
附图说明
附图1为本发明基于mycat的数据库多租户实现方法示意图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图和实施例,对本发明进行详细的说明。应当说明的是,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
该基于mycat的数据库多租户实现方法,封装登录接口,根据用户名与密码获取所属的业务库tenant,返回的tenant作为访问其他业务的第一参数;封装控制层拦截器,用户登录成功后获取到了业务库tenant,所有业务访问前将tenant传递给控制层拦截器;封装业务承载接口,利用sql拦截器与mycat提供的注解改写sql语句,mycat代理在解析时会自动路由到tenant业务库上执行sql语句。
该基于mycat的数据库多租户实现方法,包括以下步骤:
(1)用户在注册产品时,根据注册用户名生成唯一的租户id,同时分配用户所属业务库并生成所属业务库标识tenant;
(2)用户登录时,通过用户名获取租户id,再通过租户id获取该用户所属的业务库标识tenant;
(3)用户登录成功后,将所属业务库标识tenant与会话信息一起存储;
(4)利用mycat注解改写sql语句,使sql语句在解析时自动路由到业务库上。
所述步骤(1)具体包括以下步骤:
(a)用户在注册产品时,根据录入的用户名自动创建与用户名绑定的唯一租户id并存储数据库;
(b)根据用户名生成租户id后,自动分配与租户id绑定的所属业务库并生成所属业务库标识tenant存储到数据库,所属业务库标识tenant用于每次用户登录后获取使用。
所述步骤(2)中,用户登录软件时,通过用户名获取租户id,再通过租户id查询基础库配置映射关系获取登录用户所属业务库标识tenant。
所述步骤(3)中,用户登录成功并获取到所属业务库后,将所属业务库标识tenant存储于session(会话)或cookie(储存在用户本地终端上的数据),便于访问其他业务时获取所属业务库标识tenant。
所述步骤(4)具体包括以下步骤:
(a)封装sql拦截器并利用mycat提供的注解,改写sql语句sql="/*!mycat:schema="+tenant+"*/"+sql;
(b)mycat在解析时,会自动路由到tenant业务库上执行sql语句完成业务处理。