日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

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

發(fā)布時(shí)間:2023/12/3 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hazelcast_Java:如何在不到5分钟的时间内通过Hazelcast提高生产力 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

hazelcast

如果要使用Hazelcast內(nèi)存數(shù)據(jù)網(wǎng)格(IMDG)來加快數(shù)據(jù)庫應(yīng)用程序的速度,但是要處理數(shù)百個(gè)表怎么辦? 手動(dòng)編碼所有Java POJO和序列化支持將需要數(shù)周的工作,完成后,手動(dòng)維護(hù)該域模型將很快成為一場噩夢。 閱讀本文,了解如何節(jié)省時(shí)間并在5分鐘內(nèi)完成。

現(xiàn)在,有一種優(yōu)雅的方法可以管理這些需求。 Hazelcast自動(dòng)數(shù)據(jù)庫集成工具允許連接到現(xiàn)有數(shù)據(jù)庫,該數(shù)據(jù)庫可以自動(dòng)生成所有這些樣板類。 我們獲得了真正的POJO,序列化支持,配置,MapStore / MapLoad,攝取等,而無需編寫任何手動(dòng)代碼。 另外,我們還為Hazelcast分布式地圖提供了Java Stream支持。

使用工具

讓我們嘗試一個(gè)例子。 就像我的許多文章一樣,我將使用Sakila開源示例數(shù)據(jù)庫。 它可以下載為文件或Docker實(shí)例 。 Sakila包含16個(gè)表,這些表中共有90列。 它還包括帶有其他列的七個(gè)視圖。

首先,我們使用Hazelcast Auto DB Integration Initializer和試用許可證密鑰。

填寫上面顯示的值,然后按“下載”,您的項(xiàng)目將保存到計(jì)算機(jī)中。 然后,按照下一頁的說明說明如何解壓縮,啟動(dòng)該工具并獲得試用許可證。

接下來,我們連接到數(shù)據(jù)庫:

該工具現(xiàn)在將分析架構(gòu)元數(shù)據(jù),然后在另一個(gè)窗口中可視化數(shù)據(jù)庫架構(gòu):

只需按下“生成”按鈕,完整的Hazelcast域模型將在2或3秒鐘內(nèi)自動(dòng)生成。

現(xiàn)在,我們幾乎可以編寫我們的Hazelcast IMDG應(yīng)用程序了。 我們需要?jiǎng)?chuàng)建一個(gè)Hazelcast IMDG以首先存儲(chǔ)實(shí)際數(shù)據(jù)。

建筑

這是架構(gòu)與應(yīng)用程序與Hazelcast IMDG進(jìn)行通信時(shí)的樣子,Hazelcast IMDG又從底層數(shù)據(jù)庫獲取數(shù)據(jù):

該工具生成的代碼僅需要出現(xiàn)在應(yīng)用程序中,而無需出現(xiàn)在Hazelcast IMDG中。

創(chuàng)建Hazelcast IMDG

創(chuàng)建Hazelcast IMDG很容易。 將以下依賴項(xiàng)添加到pom.xml文件:

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

然后,將以下類復(fù)制到您的項(xiàng)目中:

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

重復(fù)運(yùn)行此主要方法3次,以在群集中創(chuàng)建三個(gè)Hazelcast節(jié)點(diǎn)。 較新版本的IDEA要求在“運(yùn)行/調(diào)試配置”中啟用“允許并行運(yùn)行”。 如果只運(yùn)行一次,也可以。 即使我們的集群中只有一個(gè)節(jié)點(diǎn),下面的示例仍然可以使用。

運(yùn)行主要方法樹時(shí)間將產(chǎn)生以下內(nèi)容:

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 ]

真好! 我們的三節(jié)點(diǎn)集群已啟動(dòng)并正在運(yùn)行!

數(shù)據(jù)提取

在運(yùn)行任何業(yè)務(wù)邏輯之前,我們需要將數(shù)據(jù)庫中的數(shù)據(jù)提取到新創(chuàng)建的Hazelcast IMDG中。 幸運(yùn)的是,該工具也為我們完成了此任務(wù)。 找到名為SakilaIngest的生成的類,并使用數(shù)據(jù)庫密碼作為第一個(gè)命令行參數(shù)運(yùn)行它,或修改代碼以使其知道密碼。 這就是生成的類的樣子。

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();}}} }

運(yùn)行時(shí),將顯示以下輸出(為簡便起見,以下簡稱):

... 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

現(xiàn)在,我們從Hazelcast IMDG中獲得了數(shù)據(jù)庫中的所有數(shù)據(jù)。 真好!

你好,世界

既然我們的網(wǎng)格已經(jīng)生效并且已經(jīng)提取了數(shù)據(jù),我們就可以訪問填充的Hazelcast地圖。 這是一個(gè)程序,該程序使用Map界面將所有長度大于一小時(shí)的影片打印到控制臺(tái):

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

電影長度是一個(gè)可選變量(即,在數(shù)據(jù)庫中可以為空),因此它會(huì)自動(dòng)映射到OptionalLong 。 可以將此行為設(shè)置為“ legacy POJO”,如果在手頭的項(xiàng)目中需要返回null,則返回null。

該工具還有一個(gè)附加功能:我們獲得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);}

引擎蓋下

該工具生成實(shí)現(xiàn)Hazelcast的“便攜式”序列化支持的POJO。 這意味著可以使用多種語言(例如Java,Go,C#,JavaScript等)編寫的應(yīng)用程序訪問網(wǎng)格中的數(shù)據(jù)。

該工具生成以下Hazelcast類:

POJO

每個(gè)實(shí)現(xiàn)可移植接口的表/視圖一個(gè)。

序列化工廠

每個(gè)模式一個(gè)。 從客戶端中的IMDG反序列化數(shù)據(jù)時(shí),需要有效地創(chuàng)建可移植POJO。

MapStore / MapLoad

每個(gè)表/視圖一個(gè)。 IMDG可使用這些類直接從數(shù)據(jù)庫加載數(shù)據(jù)。

類定義

每個(gè)表/視圖一個(gè)。 這些類用于配置。

索引效用法

每個(gè)項(xiàng)目一個(gè)。 這可用于基于數(shù)據(jù)庫索引來改進(jìn)IMDG的索引。

配置支持

每個(gè)項(xiàng)目一個(gè)。 創(chuàng)建序列化工廠,類定義和某些性能設(shè)置的自動(dòng)配置。

攝取支持

每個(gè)項(xiàng)目一個(gè)。 用于將數(shù)據(jù)從數(shù)據(jù)庫吸收到Hazelcast IMDG中的模板。

該工具還包含其他功能,例如對(duì)Hazelcast Cloud的支持和Java Stream支持。

一個(gè)特別吸引人的特性是域模型(例如POJO和序列化器)不需要位于服務(wù)器的類路徑上。 它們只需要位于客戶端的類路徑上。 這極大地簡化了網(wǎng)格的設(shè)置和管理。 例如,如果您需要更多節(jié)點(diǎn),請?zhí)砑右粋€(gè)新的通用網(wǎng)格節(jié)點(diǎn),它將加入集群并開始直接參與。

淡褐色云

可以使用應(yīng)用程序構(gòu)建器輕松配置與Hazelcast Cloud實(shí)例的連接,如以下示例所示:

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

積蓄

我估計(jì)該工具僅為較小的示例Sakila數(shù)據(jù)庫節(jié)省了幾個(gè)小時(shí)(如果不是幾天的話)的樣板代碼。 在具有數(shù)百個(gè)表的企業(yè)級(jí)項(xiàng)目中,該工具將在開發(fā)和維護(hù)方面節(jié)省大量時(shí)間。

既然您已經(jīng)學(xué)會(huì)了如何為第一個(gè)示例項(xiàng)目創(chuàng)建代碼并設(shè)置了所有必要的工具,那么我相信您可以在5分鐘內(nèi)為任何Hazelcast數(shù)據(jù)庫項(xiàng)目生成代碼。

資源資源

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

總結(jié)

以上是生活随笔為你收集整理的hazelcast_Java:如何在不到5分钟的时间内通过Hazelcast提高生产力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。