Java:如何在不到5分钟的时间内通过Hazelcast提高生产力

如果要使用Hazelcast内存数据网格(IMDG)来加快数据库应用程序的速度,但是要处理数百个表怎么办? 手动编码所有Java POJO和序列化支持将需要数周的工作,完成后,手动维护该域模型将很快成为一场噩梦。 阅读本文,了解如何节省时间并在5分钟内完成。

现在,有一种优雅的方法可以管理这些需求。 Hazelcast Auto DB集成工具允许连接到现有数据库,该数据库可以自动生成所有这些样板类。 我们获得了真正的POJO,序列化支持,配置,MapStore / MapLoad,摄取等,而无需编写任何手动代码。 此外,我们还为Hazelcast分布式地图提供了Java Stream支持。

使用工具

让我们尝试一个例子。 就像我的许多文章一样,我将使用Sakila开源示例数据库。 它可以作为文件或Docker实例下载 。 Sakila包含16个表,这些表中共有90列。 它还包括带有其他列的七个视图。

首先,我们使用Hazelcast Auto DB Integration Initializer和试用许可证密钥。

填写上面显示的值,然后按“下载”,您的项目将保存到计算机中。 然后,按照下一页的说明,说明如何解压缩,启动该工具并获得试用许可证。

接下来,我们连接到数据库:

该工具现在将分析架构元数据,然后在另一个窗口中可视化数据库架构:

只需按下“生成”按钮,完整的Hazelcast域模型将在2或3秒钟内自动生成。

现在,我们几乎可以编写我们的Hazelcast IMDG应用程序了。 我们需要创建一个Hazelcast IMDG以首先存储实际数据。

建筑

应用程序与Hazelcast IMDG进行通信时,架构就是这样,该架构又从底层数据库获取数据:

该工具生成的代码仅需要出现在应用程序中,而无需出现在Hazelcast IMDG中。

创建Hazelcast IMDG

创建Hazelcast IMDG很容易。 将以下依赖项添加到pom.xml文件:

<dependency><groupId>com.hazelcast</groupId><artifactId>hazelcast</artifactId><version>3.11</version>
</dependency>

然后,将以下类复制到您的项目中:

public class Server {public static void main(String... args) throws InterruptedException {final HazelcastInstance instance = Hazelcast.newHazelcastInstance();while (true) {Thread.sleep(1000);}}}

重复运行此主要方法3次,以在群集中创建三个Hazelcast节点。 较新版本的IDEA要求在“运行/调试配置”中启用“允许并行运行”。 如果只运行一次,也可以。 即使我们的集群中只有一个节点,下面的示例仍然可以使用。

运行主方法树时间将产生如下内容:

Members {size:3, ver:3} [Member [172.16.9.72]:5701 - d80bfa53-61d3-4581-afd5-8df36aec5bc0Member [172.16.9.72]:5702 - ee312d87-abe6-4ba8-9525-c4c83d6d99b7Member [172.16.9.72]:5703 - 71105c36-1de8-48d8-80eb-7941cc6948b4 this
]

真好! 我们的三节点集群已启动并正在运行!

数据提取

在运行任何业务逻辑之前,我们需要将数据库中的数据提取到新创建的Hazelcast IMDG中。 幸运的是,该工具也为我们做到了这一点。 找到名为SakilaIngest的生成的类,并使用数据库密码作为第一个命令行参数运行它,或修改代码以使其知道密码。 这就是生成的类的样子。

public final class SakilaIngest {public static void main(final String... argv) {if (argv.length == 0) { System.out.println("Usage: " + SakilaIngest.class.getSimpleName() + " database_password");} else {try (Speedment app = new SakilaApplicationBuilder().withPassword(argv[0]) // Get the password from the first command line parameter.withBundle(HazelcastBundle.class).build()) {IngestUtil.ingest(app).join();}}}
}

运行时,将显示以下输出(为简便起见,以下简称):

...
Completed          599 row(s) ingest of data for Hazelcast Map sakila.sakila.customer_list
Completed            2 row(s) ingest of data for Hazelcast Map sakila.sakila.sales_by_store
Completed       16,049 row(s) ingest of data for Hazelcast Map sakila.sakila.payment
Completed       16,044 row(s) ingest of data for Hazelcast Map sakila.sakila.rental
Completed          200 row(s) ingest of data for Hazelcast Map sakila.sakila.actor_info

现在,我们从Hazelcast IMDG中获得了数据库中的所有数据。 真好!

你好,世界

现在,我们的网格已经生效,并且已经提取了数据,现在可以访问填充的Hazelcast地图。 这是一个程序,该程序使用Map界面将所有长度超过一小时的影片打印到控制台:

public static void main(final String... argv) {try (Speedment app = new SakilaApplicationBuilder().withPassword("your-db-password-goes-here").withBundle(HazelcastBundle.class).build()) {HazelcastInstance hazelcast = app.getOrThrow(HazelcastInstanceComponent.class).get();IMap<Integer, Film> filmMap = hazelcast.getMap("sakila.sakila.film");filmMap.forEach((k, v) -> {if (v.getLength().orElse(0) > 60) {System.out.println(v);}});}}

电影的长度是一个可选变量(即,在数据库中可以为空),因此它会自动映射到OptionalLong 。 可以将此行为设置为“ legacy POJO”,如果在手头的项目中需要返回null,则返回null。

该工具还有一个附加功能:我们获得Java Stream支持! 因此,我们可以编写如下相同的功能:

public static void main(final String... argv) {try (Speedment app = new SakilaApplicationBuilder().withPassword("your-db-password-goes-here").withBundle(HazelcastBundle.class).build()) {FilmManager films = app.getOrThrow(FilmManager.class);films.stream().filter(Film.LENGTH.greaterThan(60)).forEach(System.out::println);}

引擎盖下

该工具生成POJO,这些POJO实现了Hazelcast的“便携式”序列化支持。 这意味着可以使用多种语言(例如Java,Go,C#,JavaScript等)编写的应用程序访问网格中的数据。

该工具生成以下Hazelcast类:

POJO

每个实现可移植接口的表/视图一个。

序列化工厂

每个模式一个。 从客户端中的IMDG反序列化数据时,需要有效地创建可移植POJO。

MapStore / MapLoad

每个表/视图一个。 IMDG可以使用这些类直接从数据库加载数据。

类定义

每个表/视图一个。 这些类用于配置。

指数效用法

每个项目一个。 这可用于基于数据库索引来改进IMDG的索引。

配置支持

每个项目一个。 创建序列化工厂,类定义和某些性能设置的自动配置。

摄取支持

每个项目一个。 用于将数据从数据库吸收到Hazelcast IMDG中的模板。

该工具还包含其他功能,例如对Hazelcast Cloud的支持和Java Stream支持。

一个特别吸引人的属性是域模型(例如POJO和序列化器)不需要位于服务器的类路径上。 它们只需要在客户端的类路径上即可。 这极大地简化了网格的设置和管理。 例如,如果您需要更多节点,请添加一个新的通用网格节点,它将加入集群并开始直接参与。

淡褐色云

可以使用应用程序构建器轻松配置与Hazelcast Cloud实例的连接,如以下示例所示:

Speedment hazelcastApp = new SakilaApplicationBuilder().withPassword(“<db-password>").withBundle(HazelcastBundle.class).withComponent(HazelcastCloudConfig.class, () -> HazelcastCloudConfig.create("<name of cluster>","<cluster password>","<discovery token>")).build();

积蓄

我估计该工具仅为较小的示例Sakila数据库节省了几个小时(如果不是几天)的样板代码。 在具有数百个表的企业级项目中,该工具将在开发和维护方面节省大量时间。

既然您已经学习了如何为第一个示例项目创建代码并设置了所有必要的工具,那么我相信您可以在5分钟内为任何Hazelcast数据库项目生成代码。

资源资源

Sakila: https ://dev.mysql.com/doc/index-other.html或https://hub.docker.com/r/restsql/mysql-sakila
初始化程序: https : //www.speedment.com/hazelcast-initializer/
手册: https : //speedment.github.io/speedment-doc/hazelcast.html

翻译自: https://www.javacodegeeks.com/2019/05/java-become-productive-hazelcast.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343727.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】 国家开放大学2020年春季 2245社会福利与保障 参考试题

试卷代号&#xff1a;2251 座位号 2 0 2 0年春季学期期末统一考试 团体工作 试题 2020年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共20分&#xff09; 1&#xff0e;( )是第一个社区睦邻服务中心&#xff0c;标志着睦邻组织运动的开始。 A&#xff0e;赫尔馆 B&…

百兆工业交换机与千兆工业交换机如何计算码率?

工业上常常会用到工业交换机&#xff0c;工程商在做小型网络监控方案的时候&#xff0c;经常需要选配合适的百兆工业交换机或千兆工业交换机&#xff0c;但是&#xff0c;到底是配百兆工业交换机还是千兆工业交换机呢&#xff1f;今天飞畅科技的小编来教您如何计算百兆工业交换…

android 剪切板广播发送者,Android使用剪切板传递数据

Android使用剪切板传递数据发布时间&#xff1a;2020-08-30 14:15:07来源&#xff1a;脚本之家阅读&#xff1a;62作者&#xff1a;Ben_love_Nicole在Activity之间传递数据还可以利用一些技巧&#xff0c;不管windows还是Linux操作系统&#xff0c;都会支持一种叫剪切板的技术&…

【渝粤教育】 国家开放大学2020年春季 2411中国现代文学 参考试题

试卷代号&#xff1a;2422 2 0 2 0年春季学期期末统一考试 汽车发动机构造与维修 试题 2020年7月 一、单项选择题&#xff08;下列各题的备选答案中&#xff0c;只有一个选项是正确的&#xff0c;请把正确答案的序号填写在括号内。15小题&#xff0c;每小题2分&#xff0c;共30…

【渝粤教育】 国家开放大学2020年春季 2528监督学 参考试题

试卷代号&#xff1a;2586 2 0 2 0年春季学期期末统一考试 城市轨道交通车站设备 试题 2020年7月 一、单项选择题&#xff08;下列选项中只有一项是正确答案&#xff0c;请将正确选项的序号字母填入括号中。每小题2分&#xff0c;共20分&#xff09; 1.城市轨道交通线路按其空间…

非网管交换机和网管交换机的区别

交换机可以分为网管型交换机以及非网管交换机&#xff0c;那么&#xff0c;对于非网管交换机和网管交换机你是否有过详细了解呢&#xff1f;非网管交换机和网管交换机二者之间有何区别呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细了解下吧&#xff01; 什么叫非网…

android 自定义baseadapter listview,android之ListView和BaseAdapter的组合使用

BaseAdapter是基本适配器&#xff0c;功能强大&#xff0c;凡是能用ArrayAdapter和SimpleAdapter解决的&#xff0c;都可以使用BaseAdapter解决。BaseAdapter是一个抽象类&#xff0c;所以需要自定义一个类来继承BaseAdapter。BaseAdapter中所必须重写的方法的意义&#xff1a;…

【渝粤教育】 国家开放大学2020年春季 2710蔬菜栽培技术 参考试题

试卷代号&#xff1a;2718 2 0 2 0年春季学期期末统一考试 动物生理基础 试题 2020年7月 一、单项选择题&#xff08;共15分&#xff0c;每小题3分&#xff09; 1&#xff0e;营养物质分解产物的主要吸收部位在( )。 A&#xff0e;食管 B&#xff0e;胃 C&#xff0e;小肠 D&am…

【渝粤教育】 国家开放大学2020年春季 2772家畜环境卫生与设施 参考试题

试卷代号&#xff1a;2776 座位号口口 2 0 2 0年春季学期期末统一考试 兽医基础 试题 2020年7月 一、单项选择题&#xff08;每题3分&#xff0c;共60分&#xff09; 1&#xff0e;局部贫血病理变化特征之一是( )。 A&#xff0e;发红 B&#xff0e;水肿 C&#xff0e;发凉 D&a…

构建器模式_我喜欢构建器模式的三个原因

构建器模式有三种方法可以用Java编程语言创建新对象&#xff1a; 伸缩构造函数&#xff08;反&#xff09;模式 Javabeans模式 建造者模式 与其他两种方法相比&#xff0c;我更喜欢使用构建器模式。 为什么&#xff1f; Joshua Bloch描述了构建器模式以及在Effective Jav…

如何分辨PoE工业交换机是否标准供电

要了解如何分辨出一台PoE交换机/PoE工业交换机是否是标准PoE供电&#xff0c;首先得要弄清楚什么是PoE交换机/PoE工业交换机。接下来我们就跟随飞畅科技的小编一起来详细了解下吧&#xff01; PoE供电交换机是指能够通过网线为远端受电终端提供网络供电的交换机&#xff0c;包…

android 蒙层广告1,subnvue安卓机打开只显示蒙层,没有任何内容【报Bug】

详细问题描述subnvue子窗体&#xff0c;在iphone上测试正常&#xff0c;而在安卓手机测试出现打开只有一个灰色蒙层&#xff0c;没有任何内容。经过调试之后发现&#xff1a;"style": {"top": "0px","bottom": "0px","…

【渝粤教育】 国家开放大学2020年春季 3956★汽车故障诊断技术 参考试题

试卷代号&#xff1a;3979 座位号 2 0 2 0年春季学期期末统一考试 会计学概论 试题 2020年7月 一、单项选择题&#xff08;在下列各题的备选答案中选择一个正确的&#xff0c;并将其序号字母填入题中的括号里&#xff0c;每小题2分&#xff0c;共20分&#xff09; 1&#xff0e…

【渝粤教育】 国家开放大学2020年春季 1007公司财务 参考试题

试卷代号&#xff1a;1013 2 0 2 0年春季学期期末统一考试 金融统计分析 试题&#xff08;开卷&#xff09; 2020年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共40分。每小题有一项答案正确&#xff0c;请将正确答案的序号填在括号内&#xff09; 1&#xff0e;中央…

工业交换机出现故障问题排查步骤详解

工业交换机虽然说具有电信级性能特征&#xff0c;可耐受严苛的工作环境&#xff0c;但是其运行中出现故障问题是不可避免的&#xff0c;当工业交换机出现故障后应当迅速地进行处理&#xff0c;尽快查出故障点&#xff0c;排除故障。在遇到故障分析较复杂时&#xff0c;必须先从…

layui datetimepicker 只日期范围到当前时间的前一天_浪琴手表如何正确调整日期?手表调日期的方法...

浪琴手表怎么样&#xff1f;先看下品牌知识浪琴表起源于1832年&#xff0c;由一位年青商人Auguste Agassiz创办。他以自己的名字在瑞士Saint-Imier开始经营钟表生意&#xff0c;其后,他的侄儿Ernest Francillon巧妙地把其业务拓展为较具规模的钟表公司&#xff0c;于1866年在瑞…

android studio ignore 模板,android studio git ignore

android studio 集成的git图形界面并不灵敏,希望更依赖shell命令1.该项目已有git仓库,打算换地址,或者重新做git命令.删除当前项目app文件夹下.git文件* 打开项目,进入Terminal命令行* git init 初始化当前项目本地仓库* 在APP文件夹下,打开.gitignore文件,书写以下内容# built…

【渝粤教育】 国家开放大学2020年春季 1013金融统计分析 参考试题

试卷代号&#xff1a;1020 2 0 2 0年春季学期期末统一考试 国际私法 试题 2020年7月 一、单项选择题&#xff08;每题2分&#xff0c;共20分&#xff0c;每题只有一项答案正确&#xff0c;请将正确答案的序号填在括号内&#xff09; 1.法律的域外效力也称为&#xff08; &#…

尚未提交线上版本_ABRSM 线上演奏考试报名指引(目前考试仅限英国 amp; 部分国家及地区)...

昨天&#xff0c;ABRSM英国公布了2021年英国本土和亚洲部分地区演奏、乐理的“线上、线下”报名及考试时间&#xff0c;虽然中国大陆的考试时间为“待定”状态&#xff0c;但为了满足考生和家长了解线上演奏考试报名流程&#xff0c;今天我们就为大家作一个详尽的线上考试报名指…

【渝粤教育】 国家开放大学2020年春季 1021劳动与社会保障法 参考试题

试卷代号&#xff1a;1026 座位号□□ 2 0 2 0年春季学期期末统一考试 西方经济学&#xff08;本&#xff09; 试题 2020年7月 一、单项选择题&#xff08;每题2分&#xff0c;共30分&#xff0c;请将你认为的正确答案的序号填入该题后的括号内&#xff09; 1&#xff0e;-般来…