从 VoltDB 定期运行 VoltDB 存储过程
Posted
技术标签:
【中文标题】从 VoltDB 定期运行 VoltDB 存储过程【英文标题】:Run VoltDB stored procedures at regular interval from VoltDB 【发布时间】:2018-10-12 03:02:12 【问题描述】:有没有办法定期执行 VoltDB 存储过程或安排存储过程在特定时间运行?
我正在探索 VotlDB 以将产品从 RDBMS 转移到 VotlDB。用java写出来的产品。
大部分查询都可以迁移到 VoltDB 存储过程中。但是在我们的产品中,我们在 oracle 中有定期执行的 cron 作业。现在我在 VoltDB 中找不到这样的功能。
我知道可以定期从应用程序调用 VoltDB 存储过程,但我们的产品部署在 Active-Active 模式下,在这种情况下,所有应用程序都会定期调用存储过程,这不是一个好的解决方案,否则,我们必须开发一些机制来仅从一个实例运行程序。
所以如果我从 VoltDB 获得 cron 作业功能会很好。
【问题讨论】:
【参考方案1】:我在 VoltDB 工作。 VoltDB 中目前没有这样的功能,例如 Oracle 中的 DBMS_JOB。
您当然可以在集群中的其中一台服务器上使用 cron 作业,或者在网络中的其他服务器上使用 sqlcmd 来运行脚本或回显单个 SQL 语句或通过 sqlcmd 向数据库执行过程命令。使 cron 作业具有高可用性是一个普遍的问题。您可能会发现这些其他讨论很有帮助:
How to convert Linux cron jobs to "the Amazon way"? https://www.reddit.com/r/linuxadmin/comments/3j3bz4/run_cronjob_only_on_one_node_in_cluster/您也可以查看 rcron 之类的内容。
从 RDBMS 转换到 VoltDB 时需要注意的一点是,VoltDB 已针对跨多个分区并行处理许多小型事务进行了优化。虽然每个分区的序列化执行架构在许多操作和流式工作负载中表现出色,但它并非旨在一次对多行执行批量操作,尤其是需要在一个事务中对可能位于不同分区中的多行执行写入的事务.
如果您有一个定期作业,例如“处理符合某些条件的所有新行”,您可能会发现此事务很慢,并且每次运行时都可能会延迟工作负载的其他部分,特别是如果许多行有积累。用插入并立即处理数据行的过程替换您可能用于摄取数据(稍后由计划作业处理)的简单 INSERT 语句将更像是“VoltDB 方式”。您甚至可能需要一个过程来检查其他记录并将一小组行作为一个组进行处理,例如将一起出现但可能无序到达的数据段拼接在一起。通过一次在一个分区内处理较少的记录,这种类型的过程将更具可扩展性,并使数据实时接近您所需的完成状态,而不是总是有一些数据等待处理。
【讨论】:
感谢您的回答。我将尝试根据您提供的想法找出一些解决方案。以上是关于从 VoltDB 定期运行 VoltDB 存储过程的主要内容,如果未能解决你的问题,请参考以下文章