Dữ liệu chuỗi thời gian là gì?
- Dữ liệu chuỗi thời gian là tập hợp dữ liệu mà mỗi điểm dữ liệu đều gắn với một dấu thời gian
- Ví dụ: giá cổ phiếu, dữ liệu nhiệt độ và mức độ sẵn sàng do thiết bị và cảm biến trả về, dữ liệu lưu lượng truy cập của website
- Các tác vụ chuỗi thời gian thường bao gồm truy vấn lọc theo thời gian và truy vấn tổng hợp để tóm tắt dữ liệu
Làm việc với chuỗi thời gian bằng PostgreSQL
- PostgreSQL có thể xử lý mọi tác vụ dữ liệu nhờ khả năng mở rộng và hệ sinh thái công cụ của nó
- Tembo đặt mục tiêu giúp người dùng dễ dàng sử dụng hệ sinh thái PostgreSQL
- Nhu cầu lớn nhất từ khách hàng là một stack có thể lưu trữ và xử lý dữ liệu chuỗi thời gian
Các thành phần của pg_timeseries
- Các yêu cầu để lưu trữ và truy vấn dữ liệu chuỗi thời gian hiệu quả:
- Dễ quản lý dữ liệu chuỗi thời gian
- Xử lý thông lượng cao
- Phản hồi nhanh với truy vấn phạm vi
- Lưu trữ hiệu quả lượng dữ liệu lớn
- Thực thi các hàm phân tích phức tạp
- Các tính năng cơ bản của PostgreSQL:
- Phân vùng gốc, nhiều loại chỉ mục, materialized view, hàm cửa sổ/hàm phân tích
- Các tiện ích mở rộng bổ sung:
- pg_partman: quản lý phân vùng
- pg_cron: lập lịch công việc
- columnar: nén
- pg_ivm: materialized view tăng dần
- pg_tier: offload dài hạn cho các partition cũ
pg_timeseries: Cách đơn giản nhất để quản lý dữ liệu chuỗi thời gian trong PostgreSQL
- pg_timeseries kết hợp chức năng của nhiều tiện ích mở rộng để cung cấp giao diện thống nhất
- Để bắt đầu, cần một bảng được phân vùng theo cột liên quan đến thời gian
CREATE TABLE measurements ( metric_name text, metric_value numeric, metric_time timestamptz NOT NULL ) PARTITION BY RANGE (metric_time); SELECT enable_ts_table('measurements'); - Bao gồm nhiều view để cung cấp thông tin quan trọng:
SELECT table_id, table_size_bytes FROM ts_table_info; SELECT * FROM ts_part_info; - Có thể thiết lập chính sách nén và xóa cho các partition:
SELECT set_ts_compression_policy('measurements', '90 days'); SELECT set_ts_retention_policy('measurements', '365 days'); - Cung cấp thêm các hàm:
SELECT locf(avg(metric_value)) OVER (ORDER BY metric_time) avg_val, last(metric_name, metric_value) highest, metric_time FROM date_bin_table(NULL::measurements, '1 hour', '[2024-05-09,2024-06-07]');
Chúng tôi mới chỉ bắt đầu
- Cần rất nhiều thành phần để xây dựng một tiện ích mở rộng chuỗi thời gian cho PostgreSQL
- Có kế hoạch phát triển công khai cùng với cộng đồng
- Lộ trình hiện tại:
- Offload các partition cũ sang cold storage như S3
- Các hàm xấp xỉ để phân tích hiệu quả
- Materialized view tăng dần
- Rollup và loại bỏ dần các partition cũ
- Thêm các hàm hỗ trợ phân tích
- Toàn bộ lộ trình có trong README trên GitHub và mức độ ưu tiên tính năng sẽ được quyết định theo nhu cầu người dùng
Ý kiến của GN⁺
- Tầm quan trọng của dữ liệu chuỗi thời gian: Tầm quan trọng của dữ liệu chuỗi thời gian đang gia tăng trong nhiều lĩnh vực như IoT, tài chính và phân tích web. pg_timeseries cung cấp công cụ để quản lý hiệu quả loại dữ liệu này.
- Khả năng mở rộng của PostgreSQL: Có thể xử lý nhiều tác vụ dữ liệu khác nhau bằng cách tận dụng các tiện ích mở rộng của PostgreSQL. pg_timeseries tích hợp các tiện ích này để tăng sự thuận tiện cho người dùng.
- Hợp tác với cộng đồng: Dự án được phát triển dưới dạng mã nguồn mở nên có thể phản ánh phản hồi từ cộng đồng. Điều này rất hữu ích cho việc cải thiện tính năng và sửa lỗi.
- Sản phẩm cạnh tranh: So với các cơ sở dữ liệu chuỗi thời gian khác như TimescaleDB, nó có ưu điểm là có thể sử dụng mà không bị ràng buộc giấy phép. Tuy nhiên, vẫn cần đánh giá so sánh về hiệu năng và tính năng.
- Các điểm cần cân nhắc khi áp dụng: Khi áp dụng pg_timeseries, cần cân nhắc khả năng tương thích với cơ sở dữ liệu hiện có, hiệu năng và chi phí bảo trì. Ngoài ra, do đặc tính của dữ liệu chuỗi thời gian, khối lượng dữ liệu có thể tăng vọt nên cần quản lý lưu trữ phù hợp.
1 bình luận
Ý kiến trên Hacker News
Tóm tắt các bình luận trên Hacker News
Incremental Materialized Views
So sánh với TimescaleDB
Bảng append-only
Sự tiến hóa của cơ sở dữ liệu chuỗi thời gian
Nhu cầu về lưu trữ dạng cột
Liên kết hữu ích
Bản ghi log của load balancer
Đổi mới mã nguồn mở
Giấy phép PostgreSQL
Thiết kế website và UI ứng dụng