什么是CockroachDB?

CockroachDB是一个我一直关注很长一段时间的项目。 这是一个开放源代码的Apache 2许可数据库( Github链接 ), 极大地从Google Spanner白皮书中汲取了灵感 。 它的核心是可水平扩展的键值存储。 但是,对我们而言真正有趣的是:1)它通过使用Postgres有线协议支持SQL; 2)具有完整的ACID语义和分布式事务。 如果您对他们如何实现这一目标感兴趣,请确保阅读CockroachLabs博客上的技术文章(我承认,有时这并不适合胆怯的人;-)。 请注意,它仍然是分布式系统,因此遵循CAP定理,更具体地说,它是CP系统。

正如您将在其常见问题解答中所读到的那样,这还处于初期阶段,因为许多事情尚未进行优化。 但是,既然他们最近增加了对join的基本支持 ,我想我应该使用Flowable引擎来尝试一下。 在本文中,我将展示在CockroachDB上运行Flowable v6流程引擎有多么容易。

(旁注:我喜欢这个名字!对于不了解它的人:蟑螂是地球上能够幸存于核爆炸等生物中的少数生物之一。相当有弹性的小动物……您也希望将其用于数据收集��)

设定

CockroachDb网站上的入门文档非常清楚,但为清楚起见,这是我遵循的步骤:

  • 下载最新的CockroachDB tarball(或您的系统需要的任何文件)
  • 解压并启动第一个节点:
    • ./cockroachdb开始
  • 启动第二个节点:
    • ./cockroach start –store = node2 –port = 26258 –http-port = 8081 –join = localhost:26257
  • 启动第三个节点:
    • ./cockroach start –store = node3 –port = 26259 –http-port = 8082 –join = localhost:26257

欢呼,您现在有一个运行着三个节点的集群,它们将很高兴地在彼此之间复制数据。 有一个不错的管理应用程序,可在8080上运行,并概述了群集:

下一步:我们需要Flowable引擎的数据库。 通过CockroachDB SQL shell创建数据库并向默认用户(maxroach)授予权限:

./cockroachdb sql
> CREATE DATABASE flowable;
> GRANT ALL ON DATABASE flowable TO maxroach;

遗憾的是,CockroachDB尚未实现JDBC元数据功能,我们在Flowable引擎中使用了该功能来自动创建数据库模式。 另外,在某些情况下我无法完全使外键正常工作,因此我复制/粘贴了Flowable SQL脚本并删除了这些脚本。 该文件已上传到Github上 。

同样,这意味着当前您需要“手动”创建数据库模式。 如果您使用的是bash终端,则可以从github下载上面的脚本,并按如下所示将其提供给CockroachDB SQL Shell。 或者,您可以将其粘贴到SQL Shell中。

sql=$(wget https://raw.githubusercontent.com/jbarrez/flowable-cockroachdb-demo/master/engine-schema.sql -q -O -)
./cockroach sql –database=flowable –user=maxroach -e “$sql”

在CockroachDB上可流动

现在数据库已准备就绪。 是时候使用此数据库作为数据存储来启动Flowable引擎。 所有源代码都可以在Github上获得: https : //github.com/jbarrez/flowable-cockroachdb-demo

由于CockroachDB使用Postgres有线协议,我们只需要将Postgres JDBC驱动程序添加到pom.xml中 :

<dependency><groupId>org.flowable</groupId><artifactId>flowable-engine</artifactId><version>6.0.0.RC1-SNAPSHOT</version>
</dependency>
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>9.4.1211.jre7</version>
</dependency>

我在这里使用当前的v6 master分支,尚未发布。 通过克隆flowable-engine项目并在根目录中执行“ mvn clean install -DskipTests”,您可以轻松地自己构建它。 用于引擎的配置文件非常简单,看起来就像连接到常规Postgres关系数据库一样。 请注意,我有点“欺骗” databaseSchemaUpdate设置以避免自动模式检查。

<property name="jdbcUrl" value="jdbc:postgresql://127.0.0.1:26257/flowable?sslmode=disable" />
<property name="jdbcDriver" value="org.postgresql.Driver" />
<property name="jdbcUsername" value="maxroach" />
<property name="jdbcPassword" value="" /><property name="databaseSchemaUpdate" value="cockroachDb" />

我们将使用的流程定义是一个简单的演示流程,它行使一些任务,例如用户任务,服务任务,子流程,计时器等:

以下代码段显示了如何以几种不同方式使用Flowable API。 如果您遵循CockroachDB管理员UI,则会看到流量增加了一段时间。 这里发生的是:

  • 第3-9行:从上方使用配置文件启动Flowable流程引擎,并获取所有服务
  • 第11行:部署流程定义
  • 第15-19行:启动100个流程实例
  • 第24-33行:完成系统中的所有任务
  • 第35行:进行历史查询

因此,正如您所看到的,简单地触摸各种API并对其进行验证就可以了,这在CockroachDB上是没有用的。

public static void main(String[] args) {ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("flowable.cfg.xml").buildProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();RuntimeService runtimeService = processEngine.getRuntimeService();TaskService taskService = processEngine.getTaskService();HistoryService historyService = processEngine.getHistoryService();repositoryService.createDeployment().addClasspathResource("demo-process.bpmn").deploy();System.out.println("Process definitions deployed = " + repositoryService.createProcessDefinitionQuery().count());Random random = new Random();for (int i=0; i<100; i++) {Map<String, Object> vars = new HashMap<>();vars.put("var", random.nextInt(100));runtimeService.startProcessInstanceByKey("myProcess", vars);}System.out.println("Process instances running = " + runtimeService.createProcessInstanceQuery().count());LinkedList<Task> tasks = new LinkedList<>(taskService.createTaskQuery().list());while (!tasks.isEmpty()) {Task task = taskService.createTaskQuery().taskId(tasks.pop().getId()).singleResult();if (task != null) {taskService.complete(task.getId());}if (tasks.isEmpty()) {tasks.addAll(taskService.createTaskQuery().list());}}System.out.println("Finished all tasks. Finished process instances = "+ historyService.createHistoricProcessInstanceQuery().finished().count());processEngine.close();
}

输出完全符合您的期望(并且与在关系数据库上运行的输出完全相同)。

Process definitions deployed = 1
Process instances running = 100
Completed 10 tasks
Completed 20 tasks
…
Completed 400 tasks
Finished all tasks. Finished process instances = 100

结论

在CockroachDB上运行Flowable流程引擎几乎是微不足道的,特别是通过出色的SQL层和CockroachDB开发人员添加的关系支持。 还有一段路要走(正如您将在他们的博客上阅读的那样),但是现在肯定已经是一项很酷的技术了! 谁又不喜欢不牺牲ACID交易的水平可扩展性呢? 它非常适合流程引擎的用例。

我将继续密切关注CockroachDB项目,因为与Flowable的结合显示出很大的潜力。 而且,正如您所知,一旦他们开始关注性能,我也非常期待能够运行一些基准测试:-)。

翻译自: https://www.javacodegeeks.com/2016/11/running-flowable-cockroachdb.html

在CockroachDB上运行Flowable相关推荐

  1. 本地运行flowable_在CockroachDB上运行Flowable

    本地运行flowable 什么是CockroachDB? CockroachDB是一个我一直关注了很长时间的项目. 这是一个开放源代码的Apache 2许可数据库( Github链接 ),该数据库在很 ...

  2. 电脑显示没有被指定在上运行_win10系统运行程序提示“dll没有被指定在windows上运行”的办法...

    有关win10系统运行程序提示"dll没有被指定在windows上运行"的操作方法想必大家有所耳闻.但是能够对win10系统运行程序提示"dll没有被指定在windows ...

  3. 使用 sched_setaffinity 将线程绑到CPU核上运行

    linux 提供CPU调度函数,可以将CPU某一个核和指定的线程绑定到一块运行. 这样能够充分利用CPU,且减少了不同CPU核之间的切换,尤其是在IO密集型压力之下能够提供较为友好的性能. 通过sch ...

  4. 从Qcheck 1.3 不能在不同操作系统上运行问题(chro124、chro342)说开来------

    [本文重在技巧学习,授人以鱼,不如授人以渔!!!] 因为公司项目需要对带宽占用进行测试, 最近看电子工业出版社<网络管理工具使用详解>就qcheck  1.3 不能在不同的操作系统之间运行 ...

  5. 不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令

    我的BLOG里有一篇文章介绍了关于SQL注入的基本原理和一些方法.最让人感兴趣的也许就是前面介绍的利用扩展存储过程xp_cmdshell来运行操作系统的控制台命令.这种方法也非常的简单,只需使用下面的 ...

  6. linux里运行windows,在Linux上运行Windows应用程序

    当前位置:我的异常网» Linux/Unix » 在Linux上运行Windows应用程序 在Linux上运行Windows应用程序 www.myexceptions.net  网友分享于:2015- ...

  7. linux下运行python unitest_Python unittest打印日志可以在Linux上运行,但在Windows上不行...

    我正在尝试编写一个unittest,它将stdout和stderr重定向到一个写在Windows网络驱动器上的文件.出于某些原因,相同的脚本(只有diff.是目录路径)可以在Linux上工作,但在Wi ...

  8. 编译可在Nexus5上运行的CyanogenMod13.0 ROM(基于Android6.0)

    编译可在Nexus5上运行的CyanogenMod13.0 ROM (基于Android6.0) 作者:寻禹@阿里聚安全 前言 下文中无特殊说明时CM代表CyanogenMod的缩写. 下文中说的&q ...

  9. linux下把进程绑定到特定cpu核上运行

    现在大家使用的基本上都是多核cpu,一般是4核的.平时应用程序在运行时都是由操作系统管理的.操作系统对应用进程进行调度,使其在不同的核上轮番运行. 对于普通的应用,操作系统的默认调度机制是没有问题的. ...

最新文章

  1. FPGA跨时钟域设计的一点总结
  2. 目标检测遮挡问题及解决方案汇总
  3. 《算法竞赛进阶指南》打卡-基本算法-AcWing 96. 奇怪的汉诺塔:递推
  4. python教程:循环(while和for)
  5. 3DSlicer8:FAQ-2
  6. 了解计算机指令和汇编指令
  7. ios apple pay 证书配置
  8. 涅槃重生的下一个超级风口:8本书助你赢在未来
  9. C#如何与OPC连接
  10. React Native系列文章
  11. 根据ip和子网掩码技术可用网段的在线工具
  12. 平台打包整合成exe安装部署(java+mysql+tomcat+war)
  13. 高速公路车路协同网络需求研究
  14. Mujoco编程开发-官方文档
  15. RAID介绍及RAID5配置实例(超详细)
  16. firefox 护眼
  17. 照片文件与计算机系统,如何备份电脑中的照片等重要文件
  18. Dism 错误 87
  19. ELK环境部署(一)--基础环境配置
  20. A40I工控主板(SBC-X40I)USB接口读写测试

热门文章

  1. Java动态代理之cglib
  2. StringTokenizer的使用
  3. 28. 实现 strStr()---LeetCode---JAVA(今天又是一行超人)
  4. 获取笔记本的SHA1的值。
  5. html5页面转场,基于HTML5 SVG的页面过渡切换效果
  6. wordcloud python3.7_[原创]win7/64位系统+python3.7.2下安装wordcloud库失败之解决——一个莫名其妙的方法...
  7. cmw500综合测试仪使用_山西优质三相直流电阻测试仪图片-南电合创
  8. git连接到github(SSH无密码登陆)
  9. 会话技术Cookie
  10. poi动态创建文档_POI创建的文档具有不同条件的灵活样式