熟悉Trino 的同学应该都知道Trino新增、删除 catalog 都需要重启集群,这个生产环境里如果需要频繁增加数据源的场景是非常不友好的操作。
    网上关于动态加载Catalog的方案有一些,但是在Trino比较新的版本里面已经无法适用。 目前官方关于这个功能一直都没有完成,详细issue  Dynamic Catalogs #12709。 详细阅读了这个issue里面的讨论,有2个推送虽然没有被官方确认合并,但这2个推送给我了改造思路,目前推送的都是半成品,所以想要完整的实现还需要自己修改源代码实现一部分功能。
 
     相关推送:JDBC  RESTFUL API

改造思路:

    1.catalog 统一维护存储 如 Database、Zoopkeeper、中间件 等。
    2.增加Restful API 接口来统一管理 管理 catalog目录
    3.集群重启、node节点单独重启,能加载到最新catalog目录。

具体实现:

   1.选择数据库来实现,方便跟公司程序集成。      
   2.按照2个github的推送,实现Database 跟 Restful 接口开发。(这部分不赘述,照着推送的代码实现就行,重点是后面的修改思路)
   3.第1步完成后,会发现遇到的问题

①启动后只有Coordinator节点能够正常的加载catalog目录,node节点启动的时候无法加载catalog目录。

这部分是因为 官方的DynamicCatalogManagerModule 功能并不完整,只实现了Coordinator的部分的功能,下面的Worker的加载功能并没有实现,这部分需要新增Worker加载Catalog目录功能、以及实现CatalogManager接口。

                  ②Restful Api接口来新增catalog时候,Worker节点没有成功加载catalog
           这个是我实现过程中花了时间最长,但是又最不需要修改的地方。网上有方案修改 DiscoveryNodeManager在检测心跳的时候去新增这个Catalog,但是我测试了下在比较新的Trino版本并没有作用。
           另外的做定时刷新,这个可能是有用,但是并不符合我的想法,我想只有在新增的catalog时API接口触发下就行,而且立马就可以用,不需要等刷新时间。
                         
       实现方案:其实ServerMainModule里注入了RestfulAPI后,就相当于Coordinator 跟 Worker 都实现了这些API,并不是只有Coordinator才有这些功能,所以这一步只要通过/v1/node 获取到所有的node节点,
       通过对应的地址去注册Catalog就行,根本就不需要去做多余的额外实现。(为了这个不需要修改的功能搞了2个星期,最后发现不需要改也能实现,崩溃。。。。。)

实践效果:

1.获取node节点

2.新增catalog

Coordinator:

Worker:

不需要重启查询:

删除某个catalog:

到这里基本就完成了不重启自动加载Catalog目录的功能,但是仍然有一点小问题,经过测试同样名称的catalog新增后删除后,再新增仍然使用同样的名称跟连接器,会导致跟前面加载进去的同名连接器冲突,但是这个可以让程序上就源头上规避掉,使用过的catalog名称就不然再使用。在数据库里面把名称设为主键,删除catalog只修改状态不删除记录。

目前这个是我实现的方案,如果有更好的想法老铁欢迎留言一起交流,关于Coordinator同步了能自动同步到Worker节点的功能,网上关于这个修改的资料比较少。

Trino418版本动态加载catalog不需要重启集群修改思路及实现的更多相关文章

  1. Android中插件开发篇之----动态加载Activity(免安装运行程序)

    一.前言 又到周末了,时间过的很快,今天我们来看一下Android中插件开发篇的最后一篇文章的内容:动态加载Activity(免安装运行程序),在上一篇文章中说道了,如何动态加载资源(应用换肤原理解析 ...

  2. 插件化开发—动态加载技术加载已安装和未安装的apk

    首先引入一个概念,动态加载技术是什么?为什么要引入动态加载?它有什么好处呢?首先要明白这几个问题,我们先从 应用程序入手,大家都知道在Android App中,一个应用程序dex文件的方法数最大不能超 ...

  3. js动态加载activeX控件在IE11与低版本IE中的差异

    由于IE11更加遵循W3C规范,所以IE11与低版本IE在加载activeX时有差别. 1.IE11中动态加载activeX的顺序 var objectTag = document.createEle ...

  4. geotrellis使用(二十三)动态加载时间序列数据

    目录 前言 实现方法 总结 一.前言        今天要介绍的绝对是华丽的干货.比如我们从互联网上下载到了一系列(每天或者月平均等)的MODIS数据,我们怎么能够对比同一区域不同时间的数据情况,采用 ...

  5. Unity Lightmap动态加载研究

    什么情况下需要Lightmap? 移动平台上目前暂时还不能开实时光影效果,会卡成幻灯片.所以就需要将光影烘焙到贴图上. 什么情况下需要动态加载Lightmap? 1.当项目抛弃了Unity的多场景模式 ...

  6. 关于实现Extjs动态加载类的方式实现

    Extjs4以前的版本没有动态加载类的方式,这样开发程序的时候加载很多的js会导致加载变慢,由于本人一直使用extjs3的版本进行开发,于是简单实现了一个动态加载类的管理器,使用方式与extjs4的方 ...

  7. 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载

    在上篇<会员管理系统的设计和开发(1)>介绍了关于会员系统的一些总体设计思路和要点,经过一段时间开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续 ...

  8. js的动态加载、缓存、更新以及复用(四)

    本来想一气呵成,把加载的过程都写了,但是卡着呢,所以只好在分成两份了. 1.页面里使用<script>来加载 boot.js . 2.然后在boot.js里面动态加载 bootLoad.j ...

  9. Java_动态加载

    Java类动态加载(一)——java源文件动态编译为class文件最近在做java动态加载这方面的工作,起初也遇到了很多困难.网上关于这方便的东西很零散,为了便于日后回过头来再看,于是我将这几天的心得 ...

  10. APK动态加载框架(DL)解析

    转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/39937639 (来自singwhatiwanna的csdn博客) 前言 好久 ...

随机推荐

  1. 【源码解读】asp.net core源码启动流程精细解读

    引言 core出来至今,已经7年了,我接触也已经4年了,从开始的2.1,2.2,3.1,5,6再到如今的7,一直都有再用,虽然我是一个Winform仔,但是源码一直从3.1到7都有再看,然后在QQ上面 ...

  2. Spring源码:Bean生命周期(终章)

    前言 本系列前面讲解了Spring的bean定义.bean实例化.bean初始化等生命周期.这些步骤使我们能够了解bean从创建到准备好使用所经历的过程.但是,除了这些步骤,bean的销毁也是非常重要 ...

  3. 技术招聘漫谈 | 正在招Golang工程师的你,赶快收藏这份识人秘籍!

    各位技术面试官,欢迎来到新一期的技术招聘漫谈专栏. 在前两期的专栏中,我们解析了前端工程师以及 Java 工程师 这两个常见技术岗位的招聘技巧. 今天,我们想把目光聚焦在一个前景与"钱&qu ...

  4. 手把手教你如何在 Linux 上源码安装最新版本 R

    如果你使用的 Linux 系统 GCC 版本太低,又没有 root 权限(即使有 root 权限又担心升级 GCC 带来的风险):同时你又不想额外多安装多一个 Anaconda 或者 Minicond ...

  5. 国际顶刊《PNAS》:爱发朋友圈的人,更容易长寿

    点上面关注我们,每日获取前沿新知 近几十年来,智能手机和网络的普及率越来越高,与此同时,"朋友圈"应运而生. 在这个朋友圈里,有人十分活跃,而也有些人是"国家级潜水运动员 ...

  6. 曲线艺术编程 coding curves 第七章 抛物线(Parabolas)

    抛物线 Parabolas 原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) ...

  7. 【C#/.NET】xUnit和Moq实现TDD

    ​  目录 前置条件 Moq xUnit TDD 实践 创建项目 红灯 绿灯 重构 单元测试一些最佳实践 总结 前置条件 Moq 安装Moq包 Install-Package Moq Moq是一个Mo ...

  8. 基于瑞芯微camera文章汇总pdf分享给大家

    前面一段时间基于瑞芯微3568平台编写了camera系列文章, 一共12篇,目前更新完毕. <瑞芯微文章合集> camera系列文章编写前后一共花费2个月时间, 期间查阅了很多资料,做了很 ...

  9. ChatGPT的探索与实践-业务应用篇

    本篇文章主要介绍在实际的开发过程当中,如何使用GPT帮助开发,优化流程,恰逢今年京东20周年庆,文末会介绍如何与618大促实际的业务相结合,来提升应用价值.全是干货,且本文所有代码和脚本都是利用GPT ...

  10. LNMP环境搭建wordPress

    LNMP linux Nginx --apache Mysql php 在redhat上LNMP的搭建 首先配置软件源仓库 给redhat选择ISO镜像并连接 输入下面代码后:wq保存并退出 [Bas ...