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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

关于以太网光纤收发器,逻辑隔离与物理隔离的理解与区别

现如今&#xff0c;随着以太网的广泛应用&#xff0c;在很多领域&#xff0c;比如说电力、银行、公安、部队、铁路、大型企事业单位专网有广泛物理隔离的以太网接入需求&#xff0c;但是什么是物理隔离以太网呢&#xff1f;什么又是逻辑隔离以太网呢&#xff1f;我们该如何判断…

javafx 自定义控件_JavaFX自定义控件– Nest Thermostat第2部分

javafx 自定义控件自从我开始创建Nest恒温器FX自定义控件以来&#xff0c;已经有一段时间了&#xff01; 因此&#xff0c;上次&#xff0c;正如Gerrit Grunwald所建议的那样&#xff0c;我花了一些时间使用inkscape复制Nest恒温器设计&#xff0c;这是构建JavaFX版本的第一步。…

初中参观机器人博物馆的作文_展馆导览机器人好不好用?小笨展馆机器人案例...

每次科技发展都会给社会带来技术变革&#xff0c;例如工业革命时代的纺纱机&#xff0c;发电机等&#xff0c;极大地提高了生产效率&#xff0c;推动了社会的进步。二十一世纪&#xff0c;人工智能成为了当下技术变革的排头兵&#xff0c;机器人作为其载体已经被应用在各类展馆…

同底数幂比较大小方法_知识体系构建:初中数学4大知识点及10大解题方法总结(干货)...

基本知识1.数与代数A、数与式&#xff1a;1. 有理数■ 有理数&#xff1a;①整数→正整数/0/负整数②分数→正分数/负分数■ 数轴&#xff1a;①画一条水平直线&#xff0c;在直线上取一点表示0(原点)&#xff0c;选取某一长度作为单位长度&#xff0c;规定直线上向右的方向为正…

4路电话光端机概述及产品特性详解

4路电话光端机&#xff0c;采用桌面型机箱结构设计&#xff0c;提供来电显示功能的4路普通电话接口。那么&#xff0c;关于4路电话光端机的功能、应用及产品特性这一块你是否了解呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细了解下吧&#xff01; 4路电话光端机概…

word如何一键全选_学会这七个Word小技巧,五分钟完成3小时的工作

在办公中我们最常用的就是Word&#xff0c;而掌握一些常用Word小技巧&#xff0c;可以助力我们的办公效率&#xff0c;从此和加班说拜拜。今天就让我们一起来看看有哪些我们常用的Word小技巧&#xff0c;快点赞收藏起来吧~一、 Word小技巧汇总1. 文档加密限制编辑有时一些重要文…

服务器日志记录_5种改善服务器日志记录的技术

服务器日志记录在最近的时间里&#xff0c;我们已经看到了许多工具可以帮助您理解日志。 开源项目&#xff08;例如Scribe和LogStash&#xff09;&#xff0c;内部部署工具&#xff08;例如Splunk&#xff09;以及托管服务&#xff08;例如SumoLogic和PaperTrail&#xff09;。…

#让人物运动_篮球人物之黄云龙,淡泊名利的他是篮球运动员中的楷模,你可记得...

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到最新文章了。 说起CBA联赛&#xff…

HDMI光端机基本知识及相关品牌介绍

因技术的提高,光纤价格的降低使它在各个领域得到很好的应用,因此各个光端机的厂家就好比是雨后春笋般发展起来。但是这里的厂家大部分技术并不是完全成熟&#xff0c;开发新技术需要耗资和人力、物力等&#xff0c;这就产生厂家多是中小企业&#xff0c;各品牌也先后出现。但是…

线程,代码和数据–多线程Java程序实际运行的方式

有些事情是您在学术或培训班上没有学到的&#xff0c;经过几年的工作经验后才逐渐了解&#xff0c;然后才意识到&#xff0c;这是非常基本的事情&#xff0c;我为什么错过了这么多年。 了解多线程Java程序的执行方式就是其中之一。 您肯定已经听说过线程&#xff0c;如何启动线…

HDMI光端机是什么?hdmi光端机产品参数及性能特点介绍

HDMI光端机就是光信号传输的终端设备。在广泛领域应用中&#xff0c;往往需要把HDMI信号源输送远处进行处理。最为突出的问题有&#xff1a;远处接收到的信号出现偏色、模糊&#xff0c;信号产生重影和拖尾及网纹干扰。(多模)/(单模)HDMI视频光端机发送器和相应的光收发系列产品…

html中的保存功能代码怎么写,java保存html代码怎么写

java保存html代码怎么写[2021-01-31 03:29:24] 简介:php去除nbsp的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#xff…

hdmi光端机运用于多媒体信息发布系统案例介绍

杭州飞畅科技HDMI光端机运用于多媒体信息发布等应用系统中&#xff0c;能将HDMI音视频信号进行远距离传输。用普通的HDMI电缆长距离传输&#xff0c;会出现信号差&#xff0c;容易受干扰&#xff0c;显示出来的图像会出现模糊、拖尾、分色等现象。如果传输距离短&#xff0c;就…

西门子实数转整数_西门子PLC指令全都翻译过来了!

点击蓝字关注我们有时我们关注的公众号消息比较多&#xff0c;错过了一些自己喜欢的消息&#xff0c;不能及时看到工控论坛的推送&#xff0c;我们可以给公众号加星标或置顶。那如何星标置顶呢&#xff1f;【打开一篇工控论坛公众号的文章&#xff0c;点击文章标题下方的蓝色字…

鸿蒙os怎么还没发布,关于鸿蒙OS系统!小米为何从支持到“失声”?看看中兴就知道了!...

鸿蒙OS在还没有正式召开发布会的时候&#xff0c;大家就一直很关注友商们对于鸿蒙OS的态度。此前中兴就表过态&#xff0c;他们不会考虑鸿蒙OS的系统&#xff0c;因为中兴自己有这一方面的规划。而在鸿蒙发布之前&#xff0c;除了中兴是正式的官方发出了相关的态度之外&#xf…

js webapp://_Project Student:维护Webapp(只读)

js webapp://这是Project Student的一部分。 其他职位包括具有Jersey的 Web服务 客户端&#xff0c;具有Jersey的 Web服务服务器 &#xff0c; 业务层 &#xff0c; 具有Spring数据的持久性 &#xff0c;分片集成测试数据 &#xff0c; Webservice集成和JPA标准查询 。 当我开…

光端机安装调试需注意的几大因素

安装光端机时要做好现场的防护措施&#xff0c;防潮、防水、防尘&#xff0c;同时注意现场的实际操作&#xff0c;必须配备合适的光纤使用&#xff0c;不能使用残缺故障的光纤&#xff0c;如果不匹配&#xff0c;则会严重影响光端机传输质量&#xff0c;涉及光缆熔接时&#xf…