熟悉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. ET框架6.0分析二、异步编程

    概述 ET框架很多地方都用到了异步,例如资源加载.AI.Actor模型等等.ET框架对C#的异步操作进行了一定程度的封装和改造,有一些特点: 显式的或者说强调了使用C#异步实现协程机制(其实C#的异步 ...

  2. Selenium - 元素定位(1) - 八种元素定位

    Selenium - 元素定位 八种元素定位 我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定 ...

  3. django 整合 vue

    django 整合 vue   安装 vue 1. 安装 node.js , 官网地址: https://nodejs.org/zh-cn/download/ 2. 使用 npm 淘宝镜像 npm i ...

  4. ET介绍—— 一切皆实体的设计

    一切皆实体 目前十分流行ECS设计,主要是守望先锋的成功,引爆了这种技术.守望先锋采用了状态帧这种网络技术,客户端会进行预测,预测不准需要进行回滚,由于组件式的设计,回滚可以只回滚某些组件即可.ECS ...

  5. AcWing 1024. 装箱问题

    有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数). 要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入格式 第一行是一个整数 V,表示箱子容量. 第二行是一个 ...

  6. L2-035 完全二叉树的层序遍历

    题目描述: 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就 ...

  7. Java工具类Result<T>

    枚举类:ResultCodeEnum /** * 统一返回结果状态信息类 * */ @Getter public enum ResultCodeEnum { SUCCESS(200,"成功& ...

  8. From Java To Kotlin 2:Kotlin 类型系统与泛型

    上期主要分享了 From Java To Kotlin 1 :空安全.扩展.函数.Lambda. 这是 From Java  to Kotlin   第二期. From Java  to Kotlin ...

  9. Vue3 之 响应式 API reactive、 effect源码,详细注释

    Vue3之响应式 API reactive. effect源码,详细注释 目录 一.实现响应式 API:reactive.shallowReactive.readonly.shallowReadonl ...

  10. uniapp主题切换功能的方式终结篇(全平台兼容)

    前面我已经给大家介绍了两种主题切换的方式,每种方式各有自己的优势与缺点,例如"scss变量+vuex"方式兼容好但不好维护与扩展,"scss变量+require" ...