6 điểm bởi GN⁺ 2024-05-21 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2024-05-21
Ý kiến trên Hacker News

Tóm tắt các bình luận trên Hacker News

  • Incremental Materialized Views

    • Incremental materialized views là tính năng cốt lõi, có thể giữ dữ liệu luôn ở trạng thái cập nhật mà không làm giảm hiệu năng mỗi khi dữ liệu mới được đưa vào.
    • Có người thắc mắc liệu sẽ dùng một triển khai như pg_ivm hay tự triển khai.
    • Hy vọng một ngày nào đó ivm sẽ được đưa vào PostgreSQL core.
  • So sánh với TimescaleDB

    • Do giới hạn giấy phép của TimescaleDB, không thể sử dụng các tính năng như nén, incremental materialized views, hay infinite storage.
    • Họ cho rằng nếu thiếu các tính năng này thì sẽ không đáp ứng được nhu cầu dữ liệu chuỗi thời gian của khách hàng, nên đã tự xây dựng một extension theo giấy phép PostgreSQL.
    • Có người từng dùng phiên bản miễn phí của TimescaleDB để shard một cơ sở dữ liệu gồm 500 triệu bản ghi quan sát. Nó hoạt động ổn mà không gặp vấn đề lớn.
    • Mong là sẽ có benchmark và kết quả so sánh. Sẽ tiếp tục theo dõi.
  • Bảng append-only

    • Đã đến lúc PostgreSQL và các cơ sở dữ liệu khác bổ sung native append-only table.
    • Dù đây không phải là cơ sở dữ liệu chuỗi thời gian, nó sẽ hữu ích cho logic/cách tiếp cận liên quan đến tiêu chuẩn hóa.
  • Sự tiến hóa của cơ sở dữ liệu chuỗi thời gian

    • Các cơ sở dữ liệu chuỗi thời gian đang tiến hóa theo những hướng sau:
      • Hội tụ về lưu trữ dạng cột và các định dạng mở như Parquet và Arrow: InfluxDB 3.0, QuestDB
      • Bổ sung tính năng chuỗi thời gian trên nền PostgreSQL: Timescale, pg_timeseries
      • Nền tảng quan sát xoay quanh hệ sinh thái Prometheus: Grafana, Victoria Metrics, Chronosphere
  • Nhu cầu về lưu trữ dạng cột

    • Phần lớn truy vấn chuỗi thời gian là truy vấn tổng hợp.
    • Vì vậy, nên tận dụng hoặc xây dựng một hệ thống lưu trữ dạng cột thật tốt cho mục đích này.
    • Có người thắc mắc vì sao PostgreSQL không có thứ gì như ClickHouse.
  • Liên kết hữu ích

    • Cảm ơn vì đã giúp biết đến Trunk và pgt.dev.
  • Bản ghi log của load balancer

    • Có người tự hỏi liệu extension này có hữu ích để xử lý các bản ghi log của load balancer (trạng thái, nội dung phản hồi, header, v.v.) hay không.
    • Có vẻ lưu trữ bằng cơ sở dữ liệu dạng cột sẽ hiệu quả hơn cơ sở dữ liệu dạng hàng thông thường.
    • Các bản ghi log của load balancer có thể được xem là tương tự các sự kiện phân tích.
  • Đổi mới mã nguồn mở

    • PostgreSQL từ trước đến nay luôn là mã nguồn mở và đã sử dụng các thư viện mã nguồn mở rất tự do.
    • Đã từng có nhiều extension độc quyền hoặc source-available, từ replication đến hỗ trợ chuỗi thời gian.
    • Giờ đây những extension độc quyền đó đang bị các lựa chọn mã nguồn mở phù hợp cạnh tranh.
  • Giấy phép PostgreSQL

    • Việc sử dụng giấy phép PostgreSQL là một quyết định đúng đắn.
  • Thiết kế website và UI ứng dụng

    • Thiết kế website đẹp và dễ đọc.
    • UI của ứng dụng cũng trông rất tốt trong ảnh demo. Có người sẵn sàng thử.