-
Notifications
You must be signed in to change notification settings - Fork 12.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature discuss] The discuss of Multi-data source plugin(多数据源插件实现讨论) #8803
Comments
#8312 欢迎大家讨论起来,提供更好的建议 |
为啥不换成 jpa 🤪 |
说个简单的方案 |
因为之前Nacos内部是使用的JdbcTemplate,我先去看下JPA的相关的资料,比较一下 |
感觉没办法解决sql 方言问题,目前执行的sql 是在nacos内部固定的 |
JPA主要是用作访问数据库,可以看做是Mapper的方法的一种实现,Mapper的实现的话不做限制,由插件编写者自己决定,但是我可以尝试默认的抽象类使用JPA来方便我的编写 |
可以解决的 具体一点是这样 |
楼主那个方案短期内应该不适用,改动比较大吧。 我的设计说明我本地自己基于Nacos2.1实现了一版多数据源的设计,支持核心config模块等,虽然其他辅助功能暂时未测试,常见的config操作都可以,目前支持PostgreSQL和Oracle,准备在支持下DB2,计划最近在抽取优化一下,然后开源一下。你们要是喜欢,我马上就开源,或提供Oracle版本的2.1打包的格式部署文件。 SPI加载数据库方言设计1、SPI初始化,增加DatabaseDialect方言类,封装分页等查询方法,使用方式为: ` @OverRide
` 核心类分页等SQL抽取设计2、ExternalStoragePersistServiceImpl核心的持久化类,将统一的分页更改为包装方式调用 通用问题解决方案设计1、动态获取驱动配置及JDBC测试查询语句,核心逻辑在ExternalDataSourceProperties文件中,及调用数据库方言进行 PostgreSQL的兼容性问题已解决: 4.3、Oracle的兼容性问题:已解决: |
这个是相当于写了个方言Builder吗,我之前考虑过这种方案,参考了jOOQ和myBatis-dynamic-sql,但是我考虑到以后Nacos可能会有扩展,而且issue方面有要求抽离SQL,所以我是直接把SQL语句都抽象出来一个单独的层专门做SQL的执行和编写 |
我大概理解了你的意思,就相当于是用Spring的Conditional注解去条件判断加载哪个数据库的具体实现,我去比对一下具体的方案,我感觉可以参考一下 |
我理解你这个方案 是要自己实现增删改查 本质上和这个插件设计是一样的 |
我理解你这个是就针对例如分页等特殊处理了下? |
目前是处理了分页和其他基础相关,nacos大部分不兼容都在SELECT方面,其次就是DELETE分页删除方面,还有些其他辅助类写死的mysql语法支持。 |
是的 相对来说 nacos现在的源码修改量较小 |
jdbc 是不需要放到spi的实现的 ,spi的实现只作为插件,目标是通过 spi 返回 可执行的sql ,由 nacos 来执行。我认为 不影响Nacos核心外部调用PersistService的引用 这点是可以考虑的 |
是否可以考虑使用 |
感觉Nacos毕竟不是数据库中间件,引入其他的ORM框架感觉是不是有点重了,JdbcTemplate 是对jdbc 封装的模板,灵活性高一些。并且nacos的相关表的操作都是固定下来的,短期内基本不会改动。所以就想先基于现有的方式改造下, |
第一点我觉得确实不能影响对于外部调用PersistService的引用,可以做下修改;jdbc没有做spi中实现,这里面的SPI主要的是返回SQL语句的应该算是; |
|
现在的方案跟这个差不多,有些微差别但是我也注意到了这个问题;第二点的话工厂模式的话可能得慢慢来,因为这是一个大工程。 |
1.建议先把持久化的类统一下package:如 “com.alibaba.nacos.config.storage”、“com.alibaba.nacos.config.storage.mysql”、“com.alibaba.nacos.config.storage.derby”,这样增加新数据库支撑可以明确知道修改那些东西。
3.数据库的差异实际并不太大,因为有些代码常量配死导致不同数据库扩展难。 |
1 similar comment
1.建议先把持久化的类统一下package:如 “com.alibaba.nacos.config.storage”、“com.alibaba.nacos.config.storage.mysql”、“com.alibaba.nacos.config.storage.derby”,这样增加新数据库支撑可以明确知道修改那些东西。
3.数据库的差异实际并不太大,因为有些代码常量配死导致不同数据库扩展难。 |
我认为还是不要使用SQL而换做ORM框架比较好,毕竟对于SQL里某些变动有时候可能找不全要修改的地方,而使用ORM框架后编译就可立即找到变更处,同时对于SQL方言的复杂度都交给ORM框架处理,对于ORM对付不了了的,按照不同的数据库先抽到一个类临时放着。 |
你好,我们最近打算使用postgresql替换mysql,能否开源你的代码 |
可以看下我的Github个人主页,之前已经放到仓库中了,欢迎Star |
并不觉得引入orm框架很重,nacos做好自己的事情就好了,为什么还要去考虑适配什么什么数据库呢交给orm去做多好,orm才是应该考虑数据库方言的地方。 |
方向不对啊,总是动不动就要SPI扩展,真的好用吗,友好吗? 我只想引入个jdbc包,改下配置即生效。 |
分享一下我的方案 (https://github.com/wuwen5/ojdbc-mysql2oracle)
export MYSQL_ORACLE_AGENT="ojdbc-mysql2oracle-1.0.2-SNAPSHOT.jar"
JAVA_OPT="${JAVA_OPT} -javaagent:${BASE_DIR}/target/${MYSQL_ORACLE_AGENT} -jar ${BASE_DIR}/target/${SERVER}.jar" 目前Oracle实现已在nacos-1.4、nacos-2.1、xxl-job项目中使用,仅供参考,其他数据库转换可自行实现。 |
我尝试自己写一个单独的plugin,参考了所谓官方文档,里面非常的不详细,配置spi的地方需要在nacos自己plugin工程里配置,就是说不能配置在自己单独的插件jar里面。文档也没说明如何nacos-server.jar如何依赖外部包来启动。导致我只能解开,将包加进去,然后才可以正常。感觉这种方式不优雅。当然,后来找到了bootjar怎么依赖外部启动,但不知道是不是可以定义多个spi。com.alibaba.nacos.plugin.datasource.mapper.Mapper |
目前我这边已经开源支持postgresql的nacos-2.2.0版本(已投产),可以直接食用:https://github.com/dylan-tao/nacos-gaussdb |
Nacos Multi-data source discuss
Background
The current configuration center module of Nacos is not perfect for the ability to access multiple data sources. With the growing voice of the community, we need to improve the plug-ins that support multiple data sources in Nacos. The existing SQL operations are abstracted from the SPI interface, and the implementation of Mysql is provided, and the existing SQL operations are transformed to support plug-in.
My Plan:
Architecture design
The overall architecture is shown below:
The overall flowchart is shown below:
Change point
Scenes to be used
How to use
The main writing steps of the plug -in writer are as follows:
How to use the user of MySQL and Derby database:
No change in use;
Nacos多数据源issue讨论介绍
背景
Nacos 目前的配置中心模块对于接入多数据源的能力是不完善的,随着社区的呼声越来越高,我们需要完善Nacos 支持多数据源的插件。将现有的 SQL 操作抽象出 SPI 接口,并提供Mysql 的实现,改造现有的 SQL 操作,让它支持插件化。
我的方案:
架构设计
整体架构如下所示:
整体流程图如下所示:
改动点
使用场景
使用方式
插件编写者的主要编写步骤如下:
MySQL以及Derby数据库的使用者的使用方式:
使用上并无改变;
The text was updated successfully, but these errors were encountered: