Giới thiệu
Cơ sở dữ liệu chuỗi thời gian (Time-Series Database - TSDB) ngày càng trở nên quan trọng trong việc xử lý và phân tích dữ liệu theo thời gian. Dữ liệu chuỗi thời gian, khác với dữ liệu giao dịch truyền thống, thường có tính liên tục, khối lượng lớn và phụ thuộc vào thời gian. Các ví dụ phổ biến bao gồm:
- Chỉ số từ hệ thống máy tính: Sử dụng CPU, tiêu thụ bộ nhớ, I/O đĩa, độ trễ mạng, và tỷ lệ lỗi, thường được thu thập ở các khoảng thời gian dưới một giây từ hàng ngàn máy chủ hoặc container.
- Đọc cảm biến IoT: Nhiệt độ, độ ẩm, áp suất, chuyển động, hoặc tiêu thụ năng lượng từ các cảm biến gắn trong thiết bị, phương tiện, hoặc thiết bị công nghiệp. Dữ liệu này có thể rất lớn, đặc biệt là trong các triển khai quy mô lớn.
- Dữ liệu giao dịch tài chính: Giao dịch tần suất cao, giá cổ phiếu, tỷ giá hối đoái và đơn hàng thị trường, tất cả đều phụ thuộc vào thời gian và cần được xử lý gần như ngay lập tức.
- Nhật ký sự kiện và telemetry: Nhật ký ứng dụng, tương tác của người dùng, sự kiện hệ thống và dấu vết kiểm toán liên tục được tạo ra, thường xuyên xảy ra trên các dịch vụ phân tán.
Tại sao cơ sở dữ liệu truyền thống gặp khó khăn
Ngay cả những cơ sở dữ liệu quan hệ và NoSQL mạnh mẽ nhất cũng gặp khó khăn khi xử lý các khối lượng dữ liệu chuỗi thời gian. Các mô hình và quy mô của dữ liệu tạm thời tạo ra các điểm nghẽn về hiệu suất, sự không hiệu quả trong lưu trữ và độ phức tạp trong vận hành mà các động cơ chung không được thiết kế để xử lý.
Tốc độ ghi cao
Dữ liệu chuỗi thời gian mang tính chất ghi cao. Việc giám sát hàng ngàn máy chủ hoặc thiết bị IoT có thể tạo ra hàng triệu phép đo mỗi giây. Trong một hệ quản trị cơ sở dữ liệu quan hệ truyền thống, mỗi lần chèn đều bao gồm:
- Ghi vào một bảng với schema cố định
- Duy trì chỉ mục để tăng tốc độ truy vấn
- Ghi lại giao dịch để đảm bảo độ bền (WAL hoặc cơ chế tương tự)
- Đảm bảo các đảm bảo ACID
Truy vấn theo khoảng thời gian
Khối lượng công việc chuỗi thời gian thường bị chi phối bởi các truy vấn theo khoảng thời gian: lấy tất cả giá trị của một chỉ số trong một khoảng thời gian. Các cơ sở dữ liệu quan hệ xuất sắc trong việc tìm kiếm điểm hoặc kết nối, nhưng việc quét hàng triệu hoặc hàng tỷ hàng cho một khoảng thời gian có thể chậm, ngay cả với chỉ mục.
Chính sách lưu giữ và downsampling
Các ứng dụng thường cần lưu giữ dữ liệu chi tiết gần đây để giám sát hoặc phân tích, trong khi tóm tắt hoặc loại bỏ dữ liệu cũ hơn. Trong các hệ thống chung, điều này rất khó khăn:
- Các script xóa thủ công hoặc công việc theo lô phải được lên lịch
- Downsampling (tổng hợp dữ liệu vào các khoảng thời gian thô hơn) yêu cầu các truy vấn phức tạp
- Chi phí lưu trữ tăng nhanh chóng nếu không có các chính sách tự động
Nhu cầu nén
Dữ liệu chuỗi thời gian có khối lượng lớn có thể nhanh chóng chiếm dụng không gian lưu trữ. Các cơ sở dữ liệu truyền thống lưu trữ mỗi điểm dữ liệu với đầy đủ metadata và padding, gây lãng phí không gian. TSDB chuyên dụng thực hiện nén delta, nén theo độ dài chạy, nén kiểu Gorilla và các cấu trúc cột để lưu trữ dữ liệu hiệu quả trong khi vẫn giữ được hiệu suất truy vấn.
Kiến trúc chính
Các cơ sở dữ liệu chuỗi thời gian được thiết kế từ đầu để xử lý dữ liệu có khối lượng lớn và theo thứ tự thời gian một cách hiệu quả. Chúng thường áp dụng các lựa chọn thiết kế có chủ đích để tối ưu hóa tốc độ ghi, hiệu quả lưu trữ và hiệu suất truy vấn tạm thời:
Bố cục lưu trữ
- Cấu trúc log chỉ ghi: Các điểm dữ liệu được ghi theo thứ tự vào đĩa hoặc bộ nhớ, đơn giản hóa việc ghi.
- Các chunk phân vùng theo thời gian: Dữ liệu được nhóm vào các khoảng thời gian cố định, cho phép quét theo khoảng thời gian hiệu quả.
- Cấu trúc cột: Một số TSDB lưu trữ mỗi trường (timestamp, giá trị, thẻ) trong các cột riêng biệt.
- Lưu trữ hỗn hợp trong bộ nhớ và trên đĩa: Dữ liệu gần đây có thể nằm trong bộ nhớ để truy cập với độ trễ thấp.
Chiến lược chỉ mục
Chỉ mục hiệu quả là rất quan trọng cho truy vấn nhanh:
- Khóa chính theo thời gian đầu tiên: Mỗi điểm dữ liệu được gán bởi ID chuỗi (chỉ số + thẻ) và timestamp.
- Chỉ mục thứ cấp: Các thẻ như host, region, hoặc loại cảm biến cho phép lọc mà không cần quét toàn bộ dữ liệu.
- Chỉ mục trong bộ nhớ cho dữ liệu nóng: Dữ liệu gần đây hoặc thường xuyên truy cập có thể được chỉ mục trong bộ nhớ.
Kỹ thuật nén
Dữ liệu chuỗi thời gian thường cho thấy các mô hình tạm thời và số, mà TSDB tận dụng để giảm lưu trữ:
- Nén delta: Lưu trữ sự khác biệt giữa các timestamp hoặc giá trị liên tiếp.
- Nén theo độ dài chạy: Lưu trữ hiệu quả các giá trị lặp lại hoặc không thay đổi theo thời gian.
- Nén kiểu Gorilla: Tối ưu hóa cho các chỉ số số thực, mã hóa cả timestamp và giá trị bằng số bit tối thiểu trong khi vẫn giữ được độ chính xác.
Chính sách giữ lại và downsampling
Một tính năng cốt lõi của TSDB là tự động hóa chính sách lưu giữ và downsampling:
- Chính sách lưu giữ: Tự động hết hạn hoặc loại bỏ dữ liệu cũ sau một khoảng thời gian cấu hình.
- Downsampling: Tổng hợp dữ liệu cũ vào các khoảng thô hơn, giữ cho sự phát triển lưu trữ có thể quản lý được.
- Truy vấn liên tục: Tính toán các tổng hợp hoặc biến đổi trong nền cho các khoảng thời gian được truy cập thường xuyên.
Các động cơ cơ sở dữ liệu chuỗi thời gian phổ biến
Một số cơ sở dữ liệu chuỗi thời gian đã xuất hiện trong thập kỷ qua, mỗi loại được tối ưu hóa cho các khối lượng công việc, tốc độ ghi và mẫu truy vấn cụ thể:
InfluxDB
InfluxDB là một TSDB mã nguồn mở hiệu năng cao, thiết kế cho phân tích và chỉ số thời gian thực. Nó có một ngôn ngữ truy vấn giống SQL (InfluxQL) và hỗ trợ các truy vấn liên tục, chính sách lưu giữ và downsampling.
TimescaleDB
TimescaleDB là một mở rộng của PostgreSQL, thêm khả năng chuỗi thời gian vào một cơ sở dữ liệu quan hệ. Nó tận dụng hệ sinh thái của PostgreSQL trong khi tối ưu hóa lưu trữ và thực thi truy vấn cho dữ liệu tạm thời.
Prometheus
Prometheus là một TSDB mã nguồn mở tập trung vào giám sát và cảnh báo trong các môi trường đám mây. Nó sử dụng mô hình thu thập chỉ số dựa trên pull và cung cấp một ngôn ngữ truy vấn mạnh mẽ, PromQL.
Kết luận
Cơ sở dữ liệu chuỗi thời gian là những động cơ được thiết kế đặc biệt để giải quyết những thách thức độc đáo của dữ liệu tạm thời: tốc độ ghi cao, truy vấn theo thời gian, chính sách lưu giữ tự động và hiệu quả lưu trữ. Bằng cách chọn một TSDB được xây dựng cho các khối lượng công việc tạm thời, các nhóm có thể thu được những hiểu biết có thể hành động từ các luồng dữ liệu mà các cơ sở dữ liệu chung không thể cung cấp.