在Java中地域分佈資料庫是如何連線和進行CRUD 操作的?
導讀 | 在過去的七年裡,我一直在使用分散式系統、平臺和資料庫。早在2015年,許多架構師就開始使用分散式資料庫擴充套件單個機器或伺服器的邊界。他們選擇這樣的資料庫是因為它的水平可伸縮性,儘管它的效能依然只能與傳統的單伺服器資料庫相媲美。 |
現在,隨著雲原生應用程式和無伺服器架構的興起,分散式資料庫需要做的不僅僅是提供橫向可伸縮性。架構師需要在主要雲區中斷期間能夠保持可用的資料庫,支援混合雲部署,併為接近客戶和終端使用者的資料提供服務。這就是地域分佈資料庫發揮作用的地方。
作為一名Java開發人員,我有兩個問題:
1. 我應該投入多少精力為雲原生地域分佈資料庫建立應用程式?
2. 這只是對我現有應用程式的快速重構還是徹底重新設計/重寫?
工作量因用例而異。但即便如此,在構建一個簡單的應用程式時,你也可以從“入門”體驗中學到很多東西。在這篇文章中,我將分享使用YugabyteDB作為地域分佈資料庫建立Java應用程式時的主要見解。你可以在GitHub上找到完整的原始碼。現在讓我們開始吧!
YugabyteDB提供完全託管的雲版本,支援AWS和GCE,類似於其他雲原生資料庫。作為開發人員,這對我來說意義重大。我只想執行一個例項,以使我可以專注於應用程式邏輯。
最後,我花了幾分鐘在AWS上啟動一個免費例項,並將連線資訊複製到我的應用程式。正如預期的那樣,體驗是順利而快捷的。在編寫一行程式碼之前,我必須下載、安裝和配置資料庫的日子已經一去不復返了。
作為一名後端開發人員,我很感激有一個原生使用SQL的資料庫。這縮短了學習曲線,讓我可以重用現有的邏輯。儘管我使用Spring Data或Micronaut,我仍然編寫和執行直接的SQL查詢。
只要YugabyteDB使用Postgres方言,我想我的簡單Java應用程式就可以透過一個很好的老JDBC介面連線到正在執行的資料庫例項。使用Yugabyteb,你可以選擇標準PostgreSQL JDBC驅動程式或帶有一些效能優勢的原生Yugabyte JDBC驅動程式。我選擇了後者。
幾分鐘後,我把膝上型電腦的IP地址新增到Yugabyte Cloud的IP允許列表中。我還編譯和啟動了示例應用程式,併成功地連線到雲例項。JDBC連線邏輯與MySQL、Postgres和其他關聯式資料庫要求我遵循的邏輯沒有什麼不同。這是一個非常好的跡象。
YBClusterAwareDataSource ds = new YBClusterAwareDataSource(); ds.setUrl("jdbc:yugabytedb://" + settings.getProperty("host") + ":" + settings.getProperty("port") + "/yugabyte"); ds.setUser(settings.getProperty("dbUser")); ds.setPassword(settings.getProperty("dbPassword")); // Additional SSL-specific settings. See the source code for details. Connection conn = ds.getConnection();
更好的是,雖然我的測試使用了一個免費的單節點例項,但是,就算我的資料庫中有60個節點跨越幾個大洲,連線邏輯仍然保持不變。對於應用程式開發人員來說,YugabyteDB是一個單一的邏輯例項,所有與資料分割槽、節點間通訊和分散式查詢執行相關的複雜性都是在幕後透明地進行。
建立連線邏輯後,我介紹幾個方法,透過JDBC連線,建立示例表然後查詢和更新其記錄。這意味著我的簡單Java應用程式必須儘可能初級。因此,我選擇了一個非常基本的用例:兩個帳戶之間的資金轉移。
示例表是用標準的CREATE TABLE 建立:
Statement stmt = conn.createStatement(); stmt.execute("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" + "id int PRIMARY KEY," + "name varchar," + "age int," + "country varchar," + "balance int" + ")");
並且只填充了兩條記錄(足以評估入門體驗):
stmt.execute("INSERT INTO " + TABLE_NAME + " VALUES" + "(1, 'Jessica', 28, 'USA', 10000)," + "(2, 'John', 28, 'Canada', 9000)");
最後,在Postgres或MySQL中查詢和更新類似表的SQL查詢,在我的地域分佈資料庫中的工作方式是相同的。以下是兩種方法的完整實現:第一種方法查詢分散式記錄,第二種方法使用分散式事務一致地更新記錄:
private static void selectAccounts(Connection conn) throws SQLException { Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM " + TABLE_NAME); while (rs.next()) { System.out.println(String.format("name = %s, age = %s, country = %s, balance = %s", rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5))); } } private static void transferMoneyBetweenAccounts(Connection conn, int amount) throws SQLException { Statement stmt = conn.createStatement(); try { stmt.execute( "BEGIN TRANSACTION;" + "UPDATE " + TABLE_NAME + " SET balance = balance - " + amount + "" + " WHERE name = 'Jessica';" + "UPDATE " + TABLE_NAME + " SET balance = balance + " + amount + "" + " WHERE name = 'John';" + "COMMIT;" ); } catch (SQLException e) { if (e.getErrorCode() == 40001) { // The operation aborted due to a concurrent transaction trying to modify the same set of rows. // Consider adding retry logic for production-grade applications. e.printStackTrace(); } else { throw e; } } System.out.println(); System.out.println(">>>> Transferred " + amount + " between accounts."); }
我很高興地確認,現代地域分佈資料庫的建立者保護我(應用程式開發人員)免受與分散式系統相關的大多數複雜性的影響。我在一分鐘內啟動了一個分散式資料庫例項,作為單個邏輯例項連線,並透過熟悉的SQL和JDBC介面查詢資料庫。我承認,我的簡單Java應用程式遠不是一個包含底層、特定於資料庫的最佳化的實際解決方案。然而,入門就像單伺服器資料庫一樣簡單,這很重要。
你可以在GitHub上找到我的完整應用程式。我鼓勵你嘗試自己執行它。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2888356/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python 連線mysql資料庫進行操作PythonMySql資料庫
- 使用go在mongodb中進行CRUD操作MongoDB
- Java實戰:教你如何進行資料庫分庫分表Java資料庫
- 在scrapy的pipelines中連線資料庫資料庫
- 【Java】Spring和Tomcat自帶的連線池實現資料庫操作JavaSpringTomcat資料庫
- java連線資料庫Java資料庫
- 如何在weka中連線資料庫資料庫
- 第77節:Java中的事務和資料庫連線池和DBUtilesJava資料庫
- 在多資料來源中對部分資料表使用shardingsphere進行分庫分表
- 【Mybatis原始碼解析】- JDBC連線資料庫的原理和操作MyBatis原始碼JDBC資料庫
- Java 資料庫連線的那些事Java資料庫
- python操作MySQL資料庫連線(pymysql)PythonMySql資料庫
- Oracle dos連線資料庫基本操作Oracle資料庫
- 使用Redis和Java進行資料庫快取 - DZone資料庫RedisJava資料庫快取
- 如何連線MySQL資料庫MySql資料庫
- 如何透過連線資料庫的方式對線下應用進行線上擴充套件資料庫套件
- IDEA中資料庫連線Idea資料庫
- Java技術分享:什麼是資料庫連線池?Java資料庫
- 資料庫學習與複習筆記--資料庫概念和不同類資料庫CRUD操作(1)資料庫筆記
- PHP中的資料庫連線方法PHP資料庫
- 如何針對服務是否有重新連線資料庫的能力進行測試資料庫
- 使用Java和Flyway進行資料庫版本控制Java資料庫
- 使用Redis和Java進行資料庫快取RedisJava資料庫快取
- 如何使用Java Streams進行資料庫查詢?Java資料庫
- C#連線和操作Oracle資料C#Oracle
- JPA之使用JPQL進行CRUD操作
- 【MySQL】自定義資料庫連線池和開源資料庫連線池的使用MySql資料庫
- 在Linux中,如何進行資料恢復?Linux資料恢復
- 如何使用帝國CMS進行資料庫匯出操作?資料庫
- 資料庫連線池設計和實現(Java版本)資料庫Java
- 使用ABAP(ADBC)和Java(JDBC)連線SAP HANA資料庫JavaJDBC資料庫
- Java Druid資料庫連線池+SpringJDBCJavaUI資料庫SpringJDBC
- 【Node.js】使用mongoose連線資料庫以及進行資料儲存Node.jsGo資料庫
- 資料庫中字串連線符的使用資料庫字串
- Kettle資料庫資源庫連線執行示例資料庫
- 帶你進入資料庫連線池資料庫
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- php與資料庫連線如何實現資料的順序和倒序PHP資料庫