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
總結
以上是生活随笔為你收集整理的hazelcast_Java:如何在不到5分钟的时间内通过Hazelcast提高生产力的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《CS2(反恐精英 2)》今日正式上线:
- 下一篇: tls jdk_使用JDK 13查看TL