他的回复:
javaudf当前不支持不同函数使用同名类,所以会出现jar包冲突的问题,针对这个问题,后续版本已经有改进规划,届时将解决不能使用同名类的问题。 javaudf进行内存控制的初衷是为了防止自定义函数使用的内存占用过多影响整个服务器的运行,其内存控制会分为两块:通过pljava_vmoptions启动参数进行配置和通过cgroup机制进行限制(通过GUC参数udf_memory_limit进行配置)。 * 通过pljava_vmoptions可以进行会话级的java层面上的控制 * 通过udf_memory_limit可以进行所有UDF进程内存使用总量的限制。 由于进程架构可以保持较高的隔离性,一个进程的异常对兄弟进程或父进程的影响相对线程架构较小,所以javaudf的基本设计思路采用的是多进程架构,隔离出独立于gaussdb CN/DN的UDF进程进行java函数的执行,防止不可靠的自定义java函数对CN/DN进程的影响。 进一步的UDF进程又分为UDF master和UDF worker进程: * UDF master进程负责管理UDF worker进程 * UDF worker进程作为实际执行java函数的最小的进程单元。 UDF worker进程之间相互独立,同样达到隔离的目的,避免个别不可靠函数对其他函数的影响,但带来的负面影响是占用资源相对较多。 库内支持自定义函数的初衷是为了实现一些简单函数,避免业务层在实现某些功能时数据库进行频繁交互,所以建议自定义函数尽量功能简单独立可靠,不频繁改动,对于较为复杂的实现尽量放在业务层实现,便于管理、调试和迭代。 后续版本计划会在udf的内存控制方式以及java类/jar包的隔离机制上着手做优化改进,敬请期待。