Di chuyển dữ liệu chuỗi thời gian từ Amazon RDS cho PostgreSQL đến Amazon Timestream bằng cách sử dụng tính năng batch load

bởi Sushant Deshmukh, Aritra Biswas, và Ravi Teja Bellamkonda | vào ngày 14 THÁNG 12 NĂM 2023 |

Amazon Timestream là một cơ sở dữ liệu chuỗi thời gian chuyên biệt, nhanh chóng, có khả năng mở rộng, được quản lý đầy đủ, giúp việc lưu trữ và phân tích hàng tỷ điểm dữ liệu chuỗi thời gian mỗi ngày trở nên dễ dàng. Timestream giúp bạn tiết kiệm thời gian và chi phí trong việc quản lý vòng đời của dữ liệu chuỗi thời gian bằng cách giữ dữ liệu gần đây trong bộ nhớ và chuyển dữ liệu lịch sử sang một tầng lưu trữ được tối ưu hóa về chi phí dựa trên các chính sách do người dùng xác định.

Trong bài đăng này, chúng tôi sẽ hướng dẫn bạn cách di chuyển dữ liệu chuỗi thời gian từ Amazon Relational Database Service (Amazon RDS) cho PostgreSQL đến Timestream bằng cách sử dụng tính năng tải lô. Giải pháp tương tự cũng sẽ hoạt động nếu dữ liệu chuỗi thời gian của bạn đặt ở Amazon Aurora PostgreSQL-Compatible Edition.

Khái niệm Timestream

Trước khi chúng ta bắt đầu, hãy xem xét một số khái niệm quan trọng của Timestream:

  • Time-series – Một chuỗi các điểm dữ liệu (hoặc bản ghi) được ghi lại qua một khoảng thời gian.
  • Record – Một điểm dữ liệu duy nhất trong một chuỗi thời gian.
  • Dimension – Một thuộc tính mô tả siêu dữ liệu của một chuỗi thời gian. Một chiều bao gồm tên chiều và giá trị chiều.
  • Measure – Giá trị thực tế đang được đo bởi bản ghi. Ví dụ bao gồm giá cổ phiếu, sử dụng CPU hoặc bộ nhớ, và đọc nhiệt độ hoặc độ ẩm. Đo lường bao gồm tên đo lường và giá trị đo lường.

Với batch load cho Timestream, bạn có thể nhập dữ liệu từ các tệp CSV được lưu trữ trong Amazon Simple Storage Service (Amazon S3). Với chức năng mới này, bạn có thể tải dữ liệu của mình lên Timestream mà không cần phải phụ thuộc vào các công cụ khác hoặc viết mã tùy chỉnh. Bạn có thể sử dụng batch load để backfill dữ liệu với thời gian chờ linh hoạt, chẳng hạn như dữ liệu mà không cần ngay lập tức cho việc truy vấn hoặc phân tích.

Tổng quan về giải pháp

Trong giải pháp này, chúng ta mô hình dữ liệu của mình bằng cách sử dụng các bản ghi đa đo lường để tải một tập dữ liệu mẫu từ cơ sở dữ liệu RDS cho PostgreSQL lên Timestream. Với các bản ghi đa đo lường, bạn có thể lưu trữ dữ liệu chuỗi thời gian của mình trong một định dạng nén hơn, giúp giảm chi phí lưu trữ dữ liệu. Ngoài ra, việc lưu trữ dữ liệu nén giúp việc viết các truy vấn đơn giản hóa cho việc truy xuất dữ liệu và cải thiện hiệu suất truy vấn. Ví dụ, bạn có thể sử dụng các bản ghi đa đo lường khi bạn đang theo dõi nhiều hơn một chỉ số được phát ra từ cùng một nguồn cùng một lúc. Các bản ghi đa đo lường cũng giúp đơn giản hóa quá trình di chuyển dữ liệu từ cơ sở dữ liệu quan hệ sang Timestream vì cơ sở dữ liệu không cần nhiều hoặc không cần thay đổi.

Kiến trúc sử dụng tiện ích xuất aws_s3 của Amazon RDS cho PostgreSQL để xuất dữ liệu chuỗi thời gian ra các tệp CSV được lưu trữ trong một bucket S3 và cũng thực hiện chuyển đổi thời gian thành định dạng epoch (điều này là một điều kiện tiên quyết cho tải lô). Sau khi dữ liệu được lưu trữ trong một bucket S3, chúng tôi sử dụng tải lô của Timestream để thực hiện di chuyển dữ liệu chuỗi thời gian một lần sang một cơ sở dữ liệu Timestream.

Sơ đồ dưới đây minh họa kiến trúc này.

Yêu cầu tiên quyết

Để triển khai giải pháp này, tạo các nguồn tài nguyên sau:

Một trường hợp RDS cho PostgreSQL để lưu trữ dữ liệu chuỗi thời gian của bạn. Đối với hướng dẫn cài đặt, tham khảo tại Tạo một cơ sở dữ liệu.

Bộ dữ liệu mẫu đã được tải từ Amazon S3. Xác minh tệp đã tải xuống và nhập nó vào cơ sở dữ liệu RDS cho PostgreSQL của bạn bằng lệnh \copy.

Một bucket S3 để tạo ra dữ liệu từ Amazon RDS cho PostgreSQL. Đối với hướng dẫn, tham khảo tại Tạo bucket S3 đầu tiên của bạn và Thiết lập quyền truy cập vào một bucket Amazon S3.

Các chính sách và vai trò IAM (AWS Identity and Access Management).

Một bảng Timestream sẽ lưu trữ dữ liệu chuỗi thời gian và là mục tiêu của tải lô. Đối với hướng dẫn, tham khảo tại Tạo một bảng. Để tối ưu hóa các chạy truy vấn, hãy phân vùng bảng Timestream dựa trên chiều chiều máy chủ sử dụng một khóa phân vùng được xác định bởi người dùng. Hình ảnh dưới đây minh họa cấu hình này trên bảng điều khiển Timestream. Chúng tôi sẽ thảo luận về các khóa phân vùng chi tiết hơn trong bài đăng này.

Ngoài ra, chúng tôi khuyến khích bạn xem xét các yêu cầu tiên quyết, rủi ro và các thực hành tốt cho tải lô.

Dữ liệu mẫu

Các bảng trong Timestream hỗ trợ một thuộc tính đặc biệt (hoặc cột) được gọi là measure_name. Timestream sử dụng các giá trị trong thuộc tính tên đo để phân vùng và tạo chỉ mục cho dữ liệu. Timestream yêu cầu có ít nhất một cột measure_name; do đó, chúng tôi đã thêm một thuộc tính measure_name với một phân loại khu vực như hiển thị trong ảnh chụp màn hình dưới đây.

Bộ dữ liệu mẫu trước đó bao gồm các chỉ số CPU và bộ nhớ từ một nhóm các máy chạy trên nhiều Regions vàAvailability Zones trên AWS.

Chuẩn bị xuất Amazon RDS cho PostgreSQL ra Amazon S3

Để chuẩn bị cho việc xuất, hoàn thành các bước sau:

  1. Xác minh rằng phiên bản động cơ Amazon RDS cho PostgreSQL hỗ trợ xuất Amazon S3.
  2. Cài đặt tiện ích aws_s3 trên Amazon RDS cho PostgreSQL.
  3. Cung cấp quyền cho Amazon RDS cho PostgreSQL để truy cập vào bucket S3.

Xuất dữ liệu chuỗi thời gian từ Amazon RDS cho PostgreSQL

Trong bước này, chúng ta sử dụng hàm aws_s3.query_export_to_s3 để xuất dữ liệu chuỗi thời gian từ Amazon RDS cho PostgreSQL ra bucket S3 dưới định dạng CSV với các tiêu đề cột của tệp:

SELECT * FROM aws_s3.query_export_to_s3(
‘SELECT cast(EXTRACT(epoch from time) * 1000000 as BIGINT) as time, measure_name, region, location, hostname, mem_usage, cpu_usage from perf_metrics’,
aws_commons.create_s3_uri(‘test-aws-dms-target-bucket/batchload’, ‘perf_metrics.csv’, ‘us-west-2′), options :=’format csv, HEADER true’);

Lưu ý rằng để đáp ứng các yêu cầu tiên quyết cho batch load Timestream, chúng ta sử dụng hàm EXTRACT để chuyển đổi cột timestamp thành định dạng epoch (micro giây).

Mô hình hóa dữ liệu chỉ số hiệu suất

Hãy đi qua các thuộc tính của bộ dữ liệu mà chúng ta tải lên một bảng Timestream bằng cách sử dụng tải lô và cách nó đóng góp vào hiệu suất:

  • time – Thời điểm chính xác khi các chỉ số hiệu suất được thu thập
  • measure_name – Một thuộc tính được tổng hợp để phân loại các chỉ số hiệu suất
  • region – Khu vực nơi máy chủ được đặt
  • location – Khu vực Khả dụng nơi máy chủ được đặt
  • hostname – Tên máy chủ mà chỉ số hiệu suất được thu thập
  • mem_usage – Sử dụng bộ nhớ của máy chủ
  • cpu_usage – Sử dụng CPU của máy chủ

Chọn các chiều và chỉ số phù hợp

Khi di chuyển từ một cơ sở dữ liệu truyền thống sang Timestream, thường giả định rằng việc đổ bảng và cột từ cơ sở dữ liệu hiện tại vào Timestream sẽ hoạt động. Tuy nhiên, thách thức thực sự nằm ở việc biết các mẫu truy vấn và lựa chọn chiều, chỉ số, và tùy chọn một khóa phân vùng phù hợp.

Các chiều, bao gồm cả timestamp của bản ghi, làm cho các quan sát trở nên ngữ cảnh, giúp chúng ta xác định người, cái gì, khi nào và ở đâu của một bản ghi. Các chiều được sử dụng để tổ chức và phân loại dữ liệu, và để lọc dữ liệu như một phần của một truy vấn. Do đó, các cột region, location và hostname là sự lựa chọn lý tưởng để tổ chức và phân loại dữ liệu chỉ số hiệu suất của máy chủ.

Các chỉ số chịu trách nhiệm cho dữ liệu định lượng (các giá trị thay đổi theo thời gian). Các chỉ số cung cấp cơ sở để thực hiện các phép toán toán học (tính tổng, trung bình, sự khác biệt trong tỷ lệ thay đổi và những phép toán khác) và phân tích định lượng trên dữ liệu của bạn. Do đó, các cột (chỉ số) mem_usage và cpu_usage ghi lại các chỉ số quan trọng liên quan đến hiệu suất của máy chủ.

Có các hạn chế về số chiều, chỉ số (số chỉ số tối đa trên mỗi bản ghi, số chỉ số duy nhất trên bảng), và kích thước tối đa của một bản ghi. Những yếu tố này nên được xem xét khi thiết kế mô hình dữ liệu của bạn. Thường, dữ liệu được nhập vào Timestream xuất phát từ sự kiện hoặc chỉ số có chứa các thuộc tính bổ sung hơn so với những gì cần cho phân tích chuỗi thời gian. Để tránh vượt quá giới hạn, chỉ chọn các thuộc tính cần thiết. Khi dữ liệu không liên quan và không được truy vấn cùng nhau, việc sử dụng các bảng riêng biệt tốt hơn so với một bảng tổng hợp.

Để tìm hiểu thêm về các thực hành tốt trong mô hình dữ liệu, tham khảo tại: Các Thực hành Tốt về Mô hình Dữ liệu để Mở Khóa Giá Trị của Dữ liệu Chuỗi Thời Gian Của Bạn.

Lựa chọn khóa phân vùng do khách hàng định nghĩa

Khóa phân vùng do khách hàng định nghĩa là một tính năng mới cung cấp sự linh hoạt cần thiết để tăng tốc truy vấn và rút ra thông tin hiệu quả hơn dựa trên các nhu cầu cụ thể liên quan đến dữ liệu chuỗi thời gian. Phân vùng là một kỹ thuật được sử dụng để phân phối dữ liệu trên nhiều đơn vị lưu trữ vật lý, cho phép truy xuất dữ liệu nhanh chóng và hiệu quả hơn. Với khóa phân vùng do khách hàng định nghĩa, bạn có thể tạo một lược đồ phân vùng phù hợp với mẫu truy vấn và các trường hợp sử dụng của bạn.

Khi đến phân vùng trong Timestream, bạn có thể chọn một khóa phân vùng hoặc sử dụng phân vùng mặc định, dựa trên cột measure_name.

Chúng tôi khuyến khích lựa chọn một khóa phân vùng dựa trên một chiều có một cột độ lớn cao và thường xuyên được sử dụng như một điều kiện truy vấn. Điều này giúp phân phối dữ liệu đều qua các phân vùng và tránh vấn đề hiệu suất.

Trong trường hợp sử dụng chỉ số hiệu suất này, các cột với độ lớn cao như measure_name (mặc định) hoặc hostname có thể phù hợp làm khóa phân vùng. Tuy nhiên, sự chọn lựa phụ thuộc vào trường hợp sử dụng cụ thể và cột nào thường xuyên được sử dụng để lọc khi thực hiện truy vấn và là một cột độ lớn cao. Trong trường hợp sử dụng của chúng tôi, các mẫu truy vấn thường xuyên sử dụng hostname như là một điều kiện truy vấn, đồng thời đây cũng là một cột có độ lớn cao, và vì lý do này, chúng tôi cấu hình hostname làm khóa phân vùng do khách hàng định nghĩa.

Nên sử dụng một khóa phân vùng do khách hàng định nghĩa hơn là phân vùng mặc định.

Để tìm hiểu thêm về cách tối ưu hóa hiệu suất truy vấn bằng cách sử dụng khóa phân vùng do khách hàng định nghĩa, tham khảo tại: Giới thiệu về khóa phân vùng do khách hàng định nghĩa cho Amazon Timestream: Tối ưu hóa hiệu suất truy vấn.

Thực hiện batch load dữ liệu hàng loạt cho Timestream

Hoàn tất các bước sau để tạo một nhiệm vụ tải hàng loạt:

  1. Trên bảng điều khiển Timestream, trong bảng điều khiển điều hướng, chọn Management Tools, sau đó chọn Batch load tasks.
  2. Chọn Create batch load task.
  3. Đối với Target database, chọn cơ sở dữ liệu bạn đã tạo như là một điều kiện tiên quyết.
  4. Đối với Target table, chọn bảng bạn đã tạo như là một điều kiện tiên quyết.

Nếu cần thiết, bạn có thể thêm một bảng từ bảng điều khiển này bằng cách chọn Create new table.

  1. Đối với Data source S3 location trong Data source, chọn S3 bucket nơi dữ liệu nguồn được lưu trữ. Sử dụng nút Browse S3 để xem tài nguyên S3 mà tài khoản AWS hoạt động có quyền truy cập, hoặc nhập URL địa chỉ S3. Nguồn dữ liệu phải nằm trong cùng một Region.
  2. Trong File format settings, bạn có thể sử dụng các cài đặt mặc định để phân tích dữ liệu đầu vào. Bạn cũng có thể chọn Advanced settings và chọn các tham số định dạng CSV và chọn các tham số để phân tích dữ liệu đầu vào. Đối với thông tin về các tham số này, xem Tham số định dạng CSV.
  3. Tiếp theo, cấu hình ánh xạ mô hình dữ liệu bằng cách sử dụng Visual builder
  1. Đối với Error logs S3 location trong Error log report, chọn địa chỉ S3 sẽ được sử dụng để báo cáo lỗi. Đối với thông tin về cách sử dụng báo cáo này, xem Sử dụng báo cáo lỗi tải hàng loạt.
  2. Đối với Encryption key type, chọn một trong các loại sau đây:
  1. Amazon S3-managed key (SSE-S3) – Một khóa mã hóa mà Amazon S3 tạo, quản lý và sử dụng cho bạn.
  2. AWS KMS key (SSE-KMS) – Một khóa mã hóa được bảo vệ bởi Dịch vụ Quản lý Khóa AWS (AWS KMS).

10. Chọn Next.

11. Trên trang Review and create, xem xét các thiết lập và chỉnh sửa nếu cần thiết.

12. Chọn Create batch load task.

13. Kiểm tra trạng thái batch load

Nếu gặp bất kỳ vấn đề nào, tham khảo Hướng dẫn sửa lỗi cho các lỗi phổ biến.

Sau khi nhiệm vụ tải hàng loạt hoàn thành thành công, bạn có thể điều hướng đến trình soạn thảo truy vấn Timestream và truy vấn kết quả.

Dữ liệu sẽ xuất hiện tương tự như bảng chụp màn hình sau.

Dọn dẹp

Khi bạn đã sử dụng xong giải pháp này, hãy xóa các tài nguyên sau để tránh phí dịch vụ liên tục:

  • RDS for PostgreSQL instance
  • S3 bucket
  • Timestream table
  • IAM policies và roles

Kết luận

Trong bài viết này, chúng tôi đã hướng dẫn cách bạn có thể di chuyển dữ liệu chuỗi thời gian từ cơ sở dữ liệu quan hệ sang Timestream bằng cách sử dụng chức năng tải hàng loạt. Chúng tôi khuyến khích bạn thử nghiệm và sử dụng giải pháp để hiển thị dữ liệu bằng cách sử dụng Amazon QuickSight hoặc bảng điều khiển Grafana phù hợp với nhu cầu kinh doanh của bạn.

Hãy chia sẻ trải nghiệm của bạn trong phần bình luận. Chúng tôi đánh giá rất cao ý kiến phản hồi của bạn!

Giới thiệu về tác giả

Sushant Deshmukh là Chuyên gia tư vấn cơ sở dữ liệu của Dịch vụ chuyên nghiệp AWS. Anh làm việc với các khách hàng và đối tác của AWS để xây dựng kiến trúc cơ sở dữ liệu có độ sẵn sàng cao, có thể mở rộng và bảo mật trên AWS. Ông cung cấp kiến thức chuyên môn về thiết kế và triển khai kỹ thuật trong việc chạy khối lượng công việc cơ sở dữ liệu trên AWS, đồng thời giúp khách hàng di chuyển và hiện đại hóa cơ sở dữ liệu của họ lên Đám mây AWS. Ngoài công việc, anh thích đi du lịch và khám phá những địa điểm mới, chơi bóng chuyền và dành thời gian cho gia đình và bạn bè.

Aritra Biswas là một DBA hỗ trợ đám mây với Dịch vụ web Amazon và Chuyên gia về vấn đề chủ đề cho AWS DMS. Ông có hơn một thập kỷ kinh nghiệm làm việc với cơ sở dữ liệu quan hệ. Tại AWS, anh làm việc với các nhóm dịch vụ, Người quản lý tài khoản kỹ thuật và Kiến trúc sư giải pháp, đồng thời hỗ trợ khách hàng di chuyển khối lượng công việc cơ sở dữ liệu sang AWS. Ngoài công việc, anh thích chơi quần vợt và dành thời gian cho gia đình và bạn bè.

Ravi Teja Bellamkonda là Kỹ sư hỗ trợ đám mây II với Dịch vụ web Amazon và Chuyên gia về chủ đề cho các hệ thống lõi Amazon RDS. Anh ấy rất nhiệt tình giúp đỡ khách hàng giải quyết các vấn đề về AWS và cung cấp hỗ trợ kỹ thuật cho khách hàng, hướng dẫn họ di chuyển, tối ưu hóa và điều hướng hành trình của họ trong Đám mây AWS. Ngoài công việc, anh thích đọc sách và dành thời gian cho gia đình và bạn bè.