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

hazelcast

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

现在,有一种优雅的方法可以管理这些需求。 Hazelcast自动数据库集成工具允许连接到现有数据库,该数据库可以自动生成所有这些样板类。 我们获得了真正的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

创建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);}

引擎盖下

该工具生成实现Hazelcast的“便携式”序列化支持的POJO。 这意味着可以使用多种语言(例如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

hazelcast

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

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

相关文章

Maven的maven-help-plugin插件详解

执行下面的命令查看指定插件的详细信息&#xff1a; [~/Documents/IdeaProjects/demo02]$ mvn help:describe -Dpluginorg.apache.maven.plugins:maven-site-plugin:3.9.0 -Ddetail上述命令执行的是 maven-help-plugin 的 describe 目标&#xff0c;在参数 plugin 中输入需要描…

android官方文档中文版_最全实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...

点击 机器学习算法与Python学习 &#xff0c;选择加星标精彩内容不迷路本文转自机器之心在 Github 上一度蝉联最流行的机器学习和数据科学包 NumPy&#xff0c;已经有了非常之系统的中文文档&#xff0c;回想起当初细啃 NumPy 之时&#xff0c;不少人不得不徘徊于各大搜索引擎及…

tls jdk_使用JDK 13查看TLS配置

tls jdkJDK 13 Early Access Build 16现在可用&#xff0c;它带来的有趣的功能之一是能够使keytool命令行工具显示当前系统的TLS配置信息 。 这比尝试在单独的文档中查找受支持的TLS信息并将该信息与自己的JDK供应商和版本进行匹配要容易得多。 要查看JDK 13 Early Access Bui…

执行Plugins下的install:install报错:The packaging for this project did not assign a file to the build artif

文章目录导致错误的原因分析解决方法直接执行生命周期的某个阶段命令阶段和插件目标一起执行参考导致错误的原因分析 在 IDEA 中使用 Plugins 下的 install:install &#xff08;或者在命令行下执行命令 mvn install:install&#xff09;&#xff0c;代表执行的是 install 插件…

javascript等待异步线程完成_前端:什么是单线程,同步,异步?彻底弄懂 JavaScript 执行机制...

javascript是按照语句出现的顺序执行的。js是一行一行执行的&#xff1a;let a 1;console.log(a);let b 2;console.log(b);然而实际上js是这样的&#xff1a;setTimeout(function(){ console.log(定时器开始啦)});new Promise(function(resolve){ console.log(马上执行for循环…

react回调_回调地狱和React模式

react回调我可以更好地了解a的用途的一种方式 基于React流的方法是它简化了无阻塞IO调用的方式。 这篇文章将快速讲解进行同步远程调用所涉及的那种代码&#xff0c;然后说明如何在非阻塞IO中分层&#xff0c;尽管在资源&#xff08;尤其是线程&#xff09;的使用方面非常高效…

Maven插件列表_Maven插件查询_Maven插件查看

Maven 官方插件列表&#xff1a;https://maven.apache.org/plugins/index.html。 Maven 官方插件下载地址&#xff1a;https://repo1.maven.org/maven2/org/apache/maven/plugins/

jsp循环输出表格_「翻译」JS可视化学习之七:Promise、事件循环和异步2

喜欢排队吧&#xff0c;它能保护你的时间和精力 - 排队纪律维护员Event LoopPromise和事件循环概览图请注意上面这张图&#xff0c;Promise和事件循环的那些事&#xff0c;将在这个图上缓缓展开。微任务和(宏)任务好了&#xff0c;(经过上一节对Promise的理解)现在我们对如何创…

azure api 管理_具有Azure功能的无服务器API

azure api 管理在这篇文章中&#xff0c;我将研究一个非常简单的用例。 在执行部署管道时&#xff0c; FlexDeploy可能会产生一些应被批准或拒绝的人工任务。 例如&#xff0c;某人必须批准对生产环境的部署。 可以在FlexDeploy UI中或通过某些外部通信渠道来完成。 今天&#…

Maven插件目标

插件就是打成 jar 包的 Java 类&#xff0c;目标其实就是指方法&#xff0c;代表一种功能&#xff0c;也就是代表执行一种任务&#xff0c;你可以指定具体的任务&#xff0c;不过目标也有自己默认的任务。

android 渐变圆形进度条_flutter好用的轮子推荐七-flutter圆形或线型进度条

前言Flutter是谷歌的移动UI框架&#xff0c;可以快速在iOS和Android上构建高质量的原生用户界面。IT界著名的尼古拉斯高尔包曾说&#xff1a;轮子是IT进步的阶梯&#xff01;热门的框架千篇一律&#xff0c;好用轮子万里挑一&#xff01;Flutter作为这两年开始崛起的跨平台开发…

jakarta ee_Jakarta EE中的规范范围

jakarta ee使用Eclipse Foundation Specification Process &#xff08;EFSP&#xff09;&#xff0c;一个开放源代码规范项目就有一个专门的提交者项目团队来创建和维护一个或多个规范。 创建和维护的周期跨越了该规范的多个版本&#xff0c;因此尽管各个成员可能来去去去&…

苹果雪豹操作系统正式版_Android 11 正式版发布!

整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)头图 | CSDN 下载自谷歌官网Android 11今天正式发布了&#xff01;新版本主要加强了聊天气泡、安全隐私、电源菜单&#xff0c;以及对瀑布屏、折叠屏、双屏的支持。除了谷歌自家的Pixel 手机&#xff0c;一加、小米、OPPO、Realme的手机用…

Maven的单元测试没有执行的问题

今天使用 Maven 的单元测试&#xff0c;正常导入以下的类 org.junit.Assert; org.junit.After; org.junit.Before; org.junit.Test;在项目的根目录下执行 mvn test&#xff0c;结果并没有执行单元测试&#xff0c;也是无语了。普通的 Java 项目可以正常运行&#xff0c;但是 M…

lambda表达式优化反射_反射选择器表达式

lambda表达式优化反射Java :: Geci是一个在单元测试期间运行的代码生成器。 如果生成的代码适合源代码的实际版本&#xff0c;则测试不会失败。 如果需要进行任何修改&#xff0c;则测试将修改源代码并失败。 例如&#xff0c;存在一个需要setter和getter的新字段&#xff0c;然…

10个常用python标准库_【循序渐进学Python】11.常用标准库

安装完Python之后&#xff0c;我们也同时获得了强大的Python标准库&#xff0c;通过使用这些标准库可以为我们节省大量的时间。这里是一些常用标准库的简单说明。更多的标准库的说明&#xff0c;可以参考Python文档 sys 模块 sys模块能够访问与Python解释器紧密联系的变量和函数…

Sublime Text安装格式化xml的插件

参见&#xff1a;https://www.cnblogs.com/sxdcgaq8080/p/7682593.html

maven原型_创建自定义Maven原型

maven原型Maven原型是项目模板&#xff0c;可以帮助我们根据其类型快速创建maven入门项目 。 这是一个不费吹灰之力地引导Maven项目的好工具。 我们可以使用多种原型。 一些流行的原型包括– maven-archetype-quickstart &#xff0c; maven-archetype-webapp &#xff0c; ma…

Maven的单元测试插件maven-surefire-plugin详解

文章目录pom.xml 的配置&#xff08;注意事项&#xff0c;非常重要&#xff09;测试案例执行测试命令surefire 插件配置pom.xml 的配置&#xff08;注意事项&#xff0c;非常重要&#xff09; 1.必须引入 maven-surefire-plugin 插件&#xff0c;否则无法使用 Maven 的测试功能…