PgSQL · 最佳實踐 · 雲上的數據遷移
title: PgSQL · 最佳實踐 · 雲上的數據遷移
author: 義從
背景
大多數使用雲產品作為 IT 解決方案的客戶同時使用多款雲產品是一個普遍現象。
用戶在多款雲產品之間轉移數據成為一個基礎的需求。
例如
- 1. 用戶把線下機房中的 Oracle 數據庫中的數據 遷移到雲上 RDS PPAS 中。
- 2. 使用 RDS MYSQL 做為數據庫支撐交易型業務場景,同時使用 HybridDB for PostgreSQL 作數據倉庫解決方案。
- 3. 把 ODPS 中的大量數據導入到 HybridDB for PostgreSQL 進行實時分析。
上述場景都不可避免的需要進行雲上的數據遷移。本文給大家聊聊這方麵的一些解決方案,希望能幫助大家用好雲產品。
一:關於硬件
在開始數據遷移之前,我們要對雲相關的硬件有一些了解,這往往決定了我們能做到的最好情況,有助於我們選擇最終解決方案。
1. 同一可用區
如果數據在雲上,且在同一可用區間進行交換,那麼恭喜你,這是最有效率的數據交換方式,也是我們最推薦的場景。數據應該盡量在一個可用區。
現階段的雲產品所配置的網絡最差都是千兆網絡,萬兆網絡基本普及。數據的遷移在一個可用區間經過的交換機最小,因此延遲低,帶寬較大,可以做到比較理想的吞吐量。
因此,後端數據庫、前端ECS和存放大量數據的 OSS 都應該在選擇在同一個可用區。
2. 跨可用區、城市間可用區
部分有較高可用性要求的客戶,會選擇同城多可用區部署,甚至跨城市部署。進一步,阿裏雲有很多數據產品支持原生的多可用區部署方案。
阿裏雲在同城或跨城市的可用區間是通過專線網絡連接。在這樣的網絡產品中交換數據效率雖然沒有再同一可用區高,但依然能保證較高的網絡質量。
從網絡通訊效率角度,從高到低自然是:
同可用區 > 同城多可用區間 > 跨城多可用區間
例如:
(華東一 可用區B 內部) > (華東一 可用區B 和 華東一 可用區C 間) > (華東一 可用區B 和 華北一 可用區B 間)
3. 公網和 VPN 網絡
這是效率最差的情況,也是背景章節中的數據上雲場景的典型。因為該場景的物理通道是公共的且不可控。往往延遲較大,且質量有較大波動。
先天不足,自然需要用軟件做適當的彌補,通常建議用戶選取具有下列特性的軟件或服務。
- a: 支持重試機製,支持斷點續傳,大任務不能由於一個異常導致整個失敗。
- b: 支持並發機製,使用大並發增大吞吐量。
- c: 使用增量數據遷移減少服務的停機時間。
接下來聊一聊數據交換中的數據格式問題。
二:關於數據格式
在不同數據產品間轉移數據通常有兩種方式
1. 不落地的數據遷移
軟件或服務同時連接到源數據端和目的端,把數據從源端拉出來,轉換成目的端識別的格式後立即寫入到目的端。
該方法不需要數據中轉空間,但要求的網絡質量較高。如果數據量超大,如 TB 級,那麼遷移時間也比較長。
阿裏雲開源產品 rds_dbsync, CDP(dataX, 雲服務 DTS 都屬於這類。
2. 通過通用文件格式的數據遷移
如果您的數據量較大,則建議使用離線遷移轉移數據,例如幾十 TB 的數倉數據。
離線遷移是指把全量數據導出成一種通用的數據格式,再導入到目的數據庫。
相比不落地數據遷移,他有這些優勢
- 1)離線導出的數據通常都會進行壓縮,壓縮比一般在 1:2 到 1:5 之間,能較大節省網絡開銷,從而提升整體效率。
- 2)離線方式很容易並行化,並行是提高效率的最有效手段。
基於文件的數據遷移,文件的格式是其中的關鍵。文件需要明確的交代數據的組織方式。
目前常用的文件格式有: TXT/CSV TSV ORC Parquet protobuf 等。
這裏部分數據格式已經自帶數據壓縮,例如 ORC Parquet。 對於未壓縮的格式,如 CSV 可以自由選擇數據壓縮格式,例如 gzip bzip2 snappy 等。
2.1 通過 TEXT/CSV 文件中轉數據
- 對於結構化數據,比較理想的數據格式是 CSV,CSV 是一種通用的數據格式標準,格式簡單且透明,大家可以參考資料:CSV文件標準。
- PostgreSQL CSV 參數在資料2中。適用於社區和阿裏雲的 PostgreSQL 已經 Greenplum 和 HybridDB for PostgreSQL。
- 任何符合 CSV 標準的文件都可以導入 PostgreSQL 係列產品。
CSV 相對簡單的文本格式的優勢是定義了清楚的語意,用於很容易處理一些複雜的場景
- CSV 行分割符號是 ‘\n’ ,也就是換行符
- DELIMITER 用於定義列的分割符
- 當用戶數據中包括 DELIMITER 時,則需要配合 QUOTE 參數。
- 推薦的列分割符有 ‘,’、‘\t‘ 、‘|’ 或一些不常出現的字符。
- QUOTE 以列為單位包裹有特殊字符的用戶數據
- 用戶包含有特殊字符的字符串會被 QUOTE 包裹,用於區分用戶數據和控製字符。
- 如果不必要,例如整數,數據不會被 QUOTE 包裹(用於優化效率)。
- QUOTE 不能和 DELIMITER 相同,默認 QUOTE 是雙引號。
- 當用戶數據中包含了 QUOTE 字符,則需要使用轉義字符 ESCAPE 加以區分。
- ESCAPE 特殊字符轉義
- 轉義字符出現在需要轉義的特殊字符前,表示它不是一個特殊字符
- ESCAPE 默認和 QUOTE 相同,也就是雙引號。
- 也支持設置成 ‘\’(MySQL 默認的轉義字符)或別的字符。
這是典型的 TEXT 和 CSV 文件中默認的控製字符
控製字符 \ 格式 | TEXT | CSV |
---|---|---|
DELIMITER(列分割符) | \t (tab) | , (comma) |
QUOTE(摘引) | " (double-quote) | "(double-quote) |
ESCAPE(轉義) | (不適用) | 和 QUOTE 相同 |
NULL(空值) | \N (backslash-N) | (無引號的空字符串) |
所有的控製字符都必須是單字節字符
2.2 用 OSS 中專數據
OSS 和 AWS 的 S3 一樣,是雲上廉價的存儲服務,它打通了幾乎所有的雲產品。我們推薦用戶使用它來中專大容量數據。
OSS 支持跨可用區數據轉儲數據(跨區域複製),用戶可以很高效的把大量數據轉移到另一個可用區。
目前,雲裳的 PostgreSQL 和 HybridDB for PostgreSQL 都支持 OSS 數據源的讀寫。
總結
本期分享了雲上和數據轉移相關的幾個簡單技巧,希望能幫到大家用好雲。我們的產品在快速迭代,也請大家多反饋問題,幫助我們進步。
參考資料
- CSV 格式標準
- PostgreSQL COPY
- PostgreSQL + OSS oss_fdw
- HybridDB for PostgreSQL COPY
- HybridDB for PostgreSQL + OSS oss_ext
- 阿裏雲開源軟件 rds_dbsync
- SLS 支持投遞 CSV 格式的數據到 OSS
最後更新:2017-06-30 11:02:52