TimescaleDB là một cơ sở dữ liệu mã nguồn mở được phát minh để làm cho SQL có thể mở rộng cho dữ liệu chuỗi thời gian. Đó là một hệ thống cơ sở dữ liệu tương đối mới. TimescaleDB đã được giới thiệu ra thị trường hai năm trước và đạt đến phiên bản 1.0 vào tháng 9 năm 2018. Tuy nhiên, nó được thiết kế dựa trên một hệ thống RDBMS hoàn thiện.
TimescaleDB được đóng gói dưới dạng một phần mở rộng PostgreSQL. Tất cả mã được cấp phép theo giấy phép nguồn mở Apache-2, ngoại trừ một số mã nguồn liên quan đến các tính năng doanh nghiệp chuỗi thời gian được cấp phép theo Giấy phép Timescale (TSL).
Là cơ sở dữ liệu chuỗi thời gian, nó cung cấp phân vùng tự động theo ngày tháng và các giá trị khóa. Hỗ trợ SQL gốc TimescaleDB làm cho nó trở thành một lựa chọn tốt cho những người có kế hoạch lưu trữ dữ liệu chuỗi thời gian và đã có kiến thức ngôn ngữ SQL vững chắc.
Nếu bạn đang tìm kiếm một cơ sở dữ liệu chuỗi thời gian có thể sử dụng SQL, HA phong phú, một giải pháp sao lưu chắc chắn, sao lưu và các tính năng doanh nghiệp khác, blog này có thể đưa bạn đi đúng hướng.
Khi nào sử dụng TimescaleDB
Trước khi bắt đầu với các tính năng của TimescaleDB, hãy xem nó có thể phù hợp ở đâu. TimescaleDB được thiết kế để cung cấp những gì tốt nhất của cả NoSQL và quan hệ, với trọng tâm là chuỗi thời gian. Nhưng dữ liệu chuỗi thời gian là gì?
Dữ liệu chuỗi thời gian là cốt lõi của Internet vạn vật, hệ thống giám sát và nhiều giải pháp khác tập trung vào dữ liệu thường xuyên thay đổi. Như tên gọi “chuỗi thời gian” gợi ý, chúng ta đang nói về dữ liệu thay đổi theo thời gian. Khả năng cho loại DBMS như vậy là vô tận. Bạn có thể sử dụng nó trong các trường hợp sử dụng IoT công nghiệp khác nhau trong lĩnh vực sản xuất, khai thác, dầu khí, bán lẻ, chăm sóc sức khỏe, giám sát hoạt động của nhà phát triển hoặc lĩnh vực thông tin tài chính. Nó cũng có thể phù hợp rất nhiều trong các đường ống học máy hoặc như một nguồn cho hoạt động kinh doanh và trí thông minh.
Không có nghi ngờ gì về việc nhu cầu về IoT và các giải pháp tương tự sẽ ngày càng tăng. Như đã nói, chúng tôi cũng có thể mong đợi nhu cầu phân tích và xử lý dữ liệu theo nhiều cách khác nhau. Dữ liệu chuỗi thời gian thường chỉ được thêm vào - rất ít khả năng bạn sẽ cập nhật dữ liệu cũ. Bạn thường không xóa các hàng cụ thể, mặt khác, bạn có thể muốn một số loại tổng hợp dữ liệu theo thời gian. Chúng tôi không chỉ muốn lưu trữ dữ liệu của chúng tôi thay đổi như thế nào theo thời gian mà còn phân tích và học hỏi từ nó.
Vấn đề với các loại hệ thống cơ sở dữ liệu mới là chúng thường sử dụng ngôn ngữ truy vấn của riêng mình. Người dùng cần có thời gian để học một ngôn ngữ mới. Sự khác biệt lớn nhất giữa TimescaleDB và các cơ sở dữ liệu chuỗi thời gian phổ biến khác là hỗ trợ SQL. TimescaleDB hỗ trợ đầy đủ các chức năng SQL bao gồm tổng hợp dựa trên thời gian, phép nối, truy vấn con, hàm cửa sổ và chỉ mục phụ. Hơn nữa, nếu ứng dụng của bạn đã sử dụng PostgreSQL, thì không cần thay đổi nào đối với mã máy khách.
Kiến trúc cơ bản
TimescaleDB được triển khai như một phần mở rộng trên PostgreSQL, có nghĩa là cơ sở dữ liệu quy mô thời gian chạy trong một phiên bản PostgreSQL tổng thể. Mô hình mở rộng cho phép cơ sở dữ liệu tận dụng nhiều thuộc tính của PostgreSQL như độ tin cậy, bảo mật và khả năng kết nối với một loạt các công cụ của bên thứ ba. Đồng thời, TimescaleDB tận dụng mức độ tùy chỉnh cao có sẵn cho các tiện ích mở rộng bằng cách thêm các móc vào sâu trong công cụ lập kế hoạch truy vấn, mô hình dữ liệu và công cụ thực thi của PostgreSQL.
Kiến trúc TimescaleDBSiêu bảng
Từ góc độ người dùng, dữ liệu TimescaleDB trông giống như các bảng số ít, được gọi là siêu bảng. Siêu bảng là một khái niệm hoặc một cái nhìn ngầm về nhiều bảng riêng lẻ chứa dữ liệu được gọi là khối. Dữ liệu của siêu bảng có thể là một hoặc hai thứ nguyên. Nó có thể được tổng hợp theo một khoảng thời gian và theo một giá trị "khóa phân vùng" (tùy chọn).
Trên thực tế, tất cả các tương tác của người dùng với TimescaleDB đều với các siêu bảng. Tạo bảng, chỉ mục, thay đổi bảng, chọn dữ liệu, chèn dữ liệu ... đều phải được thực hiện trên hypertable.
TimescaleDB thực hiện phân vùng mở rộng này trên cả triển khai nút đơn cũng như triển khai theo cụm (đang phát triển). Mặc dù phân vùng theo truyền thống chỉ được sử dụng để mở rộng quy mô trên nhiều máy, nó cũng cho phép chúng tôi mở rộng quy mô lên đến tốc độ ghi cao (và các truy vấn song song được cải thiện) ngay cả trên một máy.
Hỗ trợ dữ liệu quan hệ
Là một cơ sở dữ liệu quan hệ, nó có hỗ trợ đầy đủ cho SQL. TimescaleDB hỗ trợ các mô hình dữ liệu linh hoạt có thể được tối ưu hóa cho các trường hợp sử dụng khác nhau. Điều này làm cho Timescale hơi khác so với hầu hết các cơ sở dữ liệu chuỗi thời gian khác. DBMS được tối ưu hóa để nhập nhanh và các truy vấn phức tạp, dựa trên PostgreSQL và khi cần, chúng tôi có quyền truy cập để xử lý chuỗi thời gian mạnh mẽ.
Cài đặt
TimescaleDB tương tự như PostgreSQL hỗ trợ nhiều cách cài đặt khác nhau, bao gồm cài đặt trên Ubuntu, Debian, RHEL / Centos, Windows hoặc nền tảng đám mây.
Một trong những cách thuận tiện nhất để chơi với TimescaleDB là hình ảnh docker.
Lệnh dưới đây sẽ kéo một hình ảnh Docker từ Docker Hub nếu nó chưa được cài đặt và sau đó chạy nó.
docker run -d --name timescaledb -p 5432:5432 -e POSTGRES_PASSWORD=severalnines timescale/timescaledb
Lần sử dụng đầu tiên
Vì phiên bản của chúng tôi đã được thiết lập và đang chạy, đã đến lúc tạo cơ sở dữ liệu thang đo thời gian đầu tiên của chúng tôi. Như bạn có thể thấy bên dưới, chúng tôi kết nối thông qua bảng điều khiển PostgreSQL tiêu chuẩn, vì vậy Nếu bạn đã cài đặt cục bộ các công cụ máy khách PostgreSQL (ví dụ:psql), bạn có thể sử dụng chúng để truy cập phiên bản trình ghép nối TimescaleDB.
psql -U postgres -h localhost
CREATE DATABASE severalnines;
\c severalnines
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
Hoạt động hàng ngày
Từ quan điểm của cả sử dụng và quản lý, TimescaleDB trông giống như PostgreSQL và có thể được quản lý và truy vấn như vậy.
Các gạch đầu dòng chính cho các hoạt động hàng ngày là:
- Cùng tồn tại với các cơ sở dữ liệu TimescaleDB và PostgreSQL khác trên máy chủ PostgreSQL.
- Sử dụng SQL làm ngôn ngữ giao diện của nó.
- Sử dụng các trình kết nối PostgreSQL phổ biến với các công cụ của bên thứ ba để sao lưu, bảng điều khiển, v.v.
Cài đặt TimescaleDB
Các cài đặt bên ngoài của PostgreSQL thường quá thận trọng đối với các máy chủ hiện đại và TimescaleDB. Bạn nên đảm bảo cài đặt postgresql.conf của mình được điều chỉnh bằng cách sử dụng timescaledb-tune hoặc thực hiện thủ công.
$ timescaledb-tune
Tập lệnh sẽ yêu cầu bạn xác nhận các thay đổi. Sau đó, những thay đổi này sẽ được ghi vào postgresql.conf của bạn và sẽ có hiệu lực khi khởi động lại.
Bây giờ, hãy xem một số thao tác cơ bản từ hướng dẫn TimescaleDB có thể cung cấp cho bạn ý tưởng về cách làm việc với hệ thống cơ sở dữ liệu mới.
Để tạo một siêu bảng, bạn bắt đầu với một bảng SQL thông thường, sau đó chuyển đổi nó thành một siêu bảng thông qua hàm create_hypertable.
-- Create extension timescaledb
CREATE EXTENSION timescaledb;
Create a regular table
CREATE TABLE conditions (
time TIMESTAMPTZ NOT NULL,
location TEXT NOT NULL,
temperature DOUBLE PRECISION NULL,
humidity DOUBLE PRECISION NULL
);
Chuyển đổi nó thành hypertable đơn giản như sau:
SELECT create_hypertable('conditions', 'time');
Việc chèn dữ liệu vào siêu bảng được thực hiện thông qua các lệnh SQL thông thường:
INSERT INTO conditions(time, location, temperature, humidity)
VALUES (NOW(), 'office', 70.0, 50.0);
Chọn dữ liệu, là SQL cũ tốt.
SELECT * FROM conditions ORDER BY time DESC LIMIT 10;
Như chúng ta thấy bên dưới, chúng ta có thể thực hiện một nhóm theo thứ tự, và các chức năng. Ngoài ra, TimescaleDB bao gồm các hàm để phân tích chuỗi thời gian không có trong vanilla PostgreSQL.
SELECT time_bucket('15 minutes', time) AS fifteen_min,
location, COUNT(*),
MAX(temperature) AS max_temp,
MAX(humidity) AS max_hum
FROM conditions
WHERE time > NOW() - interval '3 hours'
GROUP BY fifteen_min, location
ORDER BY fifteen_min DESC, max_temp DESC;