本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從 PostgreSQL 遷移至 Aurora DSQL
Aurora DSQL 的設計與 PostgreSQL 相容,支援 ACID 交易、次要索引、聯結和標準 DML 操作等核心關聯式功能。大多數現有的 PostgreSQL 應用程式都可以遷移至 Aurora DSQL,且變更最少。
本節提供將應用程式遷移至 Aurora DSQL 的實際指導,包括架構相容性、遷移模式和架構考量。
架構和 ORM 相容性
Aurora DSQL 使用標準 PostgreSQL 線路通訊協定,以確保與 PostgreSQL 驅動程式和架構的相容性。最熱門ORMs 可搭配 Aurora DSQL 使用,且幾乎沒有變更。如需參考實作和可用的 ORM 整合Aurora DSQL 轉接器和方言,請參閱 。
常見的遷移模式
從 PostgreSQL 遷移到 Aurora DSQL 時,某些功能的運作方式不同,或有其他語法。本節提供常見遷移案例的指引。
DDL 操作替代方案
Aurora DSQL 提供傳統 PostgreSQL DDL 操作的現代替代方案:
- 建立索引
-
使用
CREATE INDEX ASYNC而非CREATE INDEX建立非封鎖索引。優點:在大型資料表上建立零停機時間索引。
- 資料移除
-
使用
DELETE FROM table_name而非TRUNCATE。替代方案:若要完成資料表重新建立,請使用
DROP TABLE,後面接著CREATE TABLE。 - 系統組態
-
Aurora DSQL 是全受管的,因此會根據工作負載模式自動處理組態。使用 AWS 管理主控台或 API 來管理叢集設定。
優點:不需要進行資料庫調校或參數管理。
結構描述設計模式
為 Aurora DSQL 相容性調整這些常見的 PostgreSQL 模式:
- 參考完整性模式
-
Aurora DSQL 支援資料表關係和
JOIN操作。如需參考完整性,請在應用程式層中實作驗證。此設計符合現代分散式資料庫模式,其中應用程式層驗證提供更多彈性,並避免層疊操作造成效能瓶頸。模式:使用一致的命名慣例、驗證邏輯和交易界限,在您的應用程式層中實作參考完整性檢查。許多大規模應用程式偏好這種方法來更好地控制錯誤處理和效能。
- 暫時資料處理
-
使用具有清除邏輯CTEs、子查詢或一般資料表,而非暫存資料表。
替代方案:建立具有工作階段特定名稱的資料表,並在應用程式中清除它們。
了解架構差異
Aurora DSQL 的分散式無伺服器架構刻意在幾個區域與傳統 PostgreSQL 不同。這些差異可實現 Aurora DSQL 簡化和擴展的關鍵優勢。
簡化的資料庫模型
- 每個叢集的單一資料庫
-
Aurora DSQL
postgres為每個叢集提供一個名為 的內建資料庫。遷移秘訣:如果您的應用程式使用多個資料庫,請建立個別的 Aurora DSQL 叢集進行邏輯分離,或在單一叢集中使用結構描述。
- 沒有暫存資料表
-
對於臨時資料處理,您應該使用常見的資料表表達式 (CTEs) 和子查詢,為複雜的查詢提供靈活的替代方案。
替代方案:將 CTEs與暫時結果集的
WITH子句搭配使用,或使用工作階段特定資料的唯一命名規則資料表。 - 自動儲存管理
-
Aurora DSQL 消除了資料表空間和手動儲存管理。儲存會自動根據您的資料模式進行擴展和最佳化。
優點:不需要監控磁碟空間、規劃儲存配置或管理資料表空間組態。
現代應用程式模式
Aurora DSQL 鼓勵現代應用程式開發模式,以改善可維護性和效能:
- 應用程式層級邏輯而非資料庫觸發
-
如需類似觸發的功能,請在應用程式層中實作事件驅動的邏輯。
遷移策略:將觸發邏輯移至應用程式程式碼、搭配 EventBridge 等 AWS 服務使用事件驅動型架構,或使用應用程式記錄實作稽核線索。
- 用於資料處理的 SQL 函數
-
Aurora DSQL 支援以 SQL 為基礎的函數,但不支援程序語言,例如 PL/pgSQL。
替代方案:使用 SQL 函數進行資料轉換,或將複雜的邏輯移至您的應用程式層或 AWS Lambda 函數。
- 樂觀並行控制,而不是冪等鎖定
-
Aurora DSQL 使用樂觀並行控制 (OCC),這是一種與傳統資料庫鎖定機制不同的無鎖定方法。Aurora DSQL 不會取得封鎖其他交易的鎖定,而是允許交易繼續進行,而不會封鎖和偵測遞交時的衝突。這可消除死結,並防止慢速交易封鎖其他操作。
關鍵差異:發生衝突時,Aurora DSQL 會傳回序列化錯誤,而不是讓交易等待鎖定。這需要應用程式實作重試邏輯,類似於處理傳統資料庫中的鎖定逾時,但衝突會立即解決,而不是導致封鎖等待。
設計模式:使用重試機制實作等冪交易邏輯。設計結構描述,透過使用隨機主索引鍵並將更新分散到您的索引鍵範圍,將爭用降至最低。如需詳細資訊,請參閱Aurora DSQL 的並行控制。
- 關係和參考完整性
-
Aurora DSQL 支援資料表之間的外部金鑰關係,包括
JOIN操作。如需參考完整性,請在應用程式層中實作驗證。雖然強制執行參考完整性可能很有價值,但串聯操作 (例如串聯刪除) 可能會產生非預期的效能問題,例如,刪除具有 1,000 個明細項目的訂單會變成 1,001 列交易。因此,許多客戶會避免外部金鑰限制。設計模式:在您的應用程式層中實作參考完整性檢查、使用最終一致性模式,或利用 AWS 服務進行資料驗證。
操作簡化
Aurora DSQL 消除了許多傳統資料庫維護任務,可降低營運開銷:
- 不需要手動維護
-
Aurora DSQL 會自動管理儲存最佳化、統計資料收集和效能調校。這類傳統維護命令由系統
VACUUM處理。優點:無需進行資料庫維護時段、清空排程和系統參數調校。
- 自動分割和擴展
-
Aurora DSQL 會根據存取模式自動分割和分配您的資料。使用 UUIDs或應用程式產生的 IDs以獲得最佳分佈。
遷移秘訣:移除手動分割邏輯,並讓 Aurora DSQL 處理資料分佈。使用 UUIDs或應用程式產生的 IDs以獲得最佳分佈。如果您的應用程式需要循序識別符,請參閱 序列和身分資料欄。
Aurora DSQL 的 PostgreSQL 相容性考量
Aurora DSQL 具有支援自我管理 PostgreSQL 差異的功能,可啟用其分散式架構、無伺服器操作和自動擴展。大多數應用程式會在這些差異中運作,無需修改。
如需一般考量,請參閱 使用 Amazon Aurora DSQL 的考量事項。如需了解配額和限制,請參閱 Amazon Aurora DSQL 中的叢集配額與資料庫限制。
-
Aurora DSQL
postgres使用每個叢集名為 的單一內建資料庫。若要進行邏輯分離,請建立個別的 Aurora DSQL 叢集,或在單一叢集中使用結構描述。 -
postgres資料庫使用 UTF-8 字元編碼,可提供廣泛的國際字元支援。 -
資料庫只會使用
C定序。 -
Aurora DSQL 以
UTC作為系統時區。Postgres 會將所有時區感知日期和時間儲存在 UTC 內部。您可以設定TimeZone組態參數來轉換用戶端的顯示方式,並做為伺服器將用來在內部轉換為 UTC 的用戶端輸入預設值。 -
交易隔離層級固定為 PostgreSQL
Repeatable Read。 -
交易有下列限制:
-
DDL 和 DML 操作需要個別的交易
-
交易只能包含 1 個 DDL 陳述式
-
無論次要索引的數量為何,交易最多可以修改 3,000 個資料列
-
3,000 個資料列的限制適用於所有 DML 陳述式 (
INSERT、UPDATE、DELETE)
-
-
資料庫連線會在 1 小時後逾時。
-
Aurora DSQL 透過結構描述層級授予來管理許可。管理員使用者使用 建立結構描述
CREATE SCHEMA,並使用 授予存取權GRANT USAGE ON SCHEMA。管理員使用者管理公有結構描述中的物件,而非管理員使用者則在使用者建立的結構描述中建立物件,以實現明確的擁有權界限。如需詳細資訊,請參閱授權資料庫角色在您的資料庫使用 SQL。
需要遷移方面的協助嗎?
如果您遇到對遷移至關重要但 Aurora DSQL 目前不支援的功能,請參閱 以了解如何與 AWS 共用意見回饋提供有關 Amazon Aurora DSQL 的意見回饋的相關資訊。