Thứ hai, 03/02/2020 | 00:00 GMT+7

Cách cài đặt và sử dụng TimescaleDB trên CentOS 7

Nhiều ứng dụng, chẳng hạn như hệ thống giám sát và hệ thống thu thập dữ liệu, tích lũy dữ liệu để phân tích thêm. Những phân tích này thường xem xét cách một phần dữ liệu hoặc một hệ thống thay đổi theo thời gian. Trong những trường hợp này, dữ liệu được biểu diễn dưới dạng một chuỗi thời gian, với mỗi điểm dữ liệu đi kèm với một dấu thời gian. Một ví dụ sẽ như thế này:

2019-11-01 09:00:00    server.cpu.1    0.9 2019-11-01 09:00:00    server.cpu.15   0.8 2019-11-01 09:01:00    server.cpu.1    0.9 2019-11-01 09:01:00    server.cpu.15   0.8 ... 

Mức độ liên quan của dữ liệu chuỗi thời gian gần đây đã tăng lên nhờ các triển khai mới của Internet vạn vật (IoT) và Internet vạn vật công nghiệp. Ngày càng có nhiều thiết bị thu thập thông tin chuỗi thời gian khác nhau: máy theo dõi thể dục, đồng hồ thông minh, trạm thời tiết tại nhà và nhiều loại cảm biến khác nhau, có thể kể đến một vài thiết bị. Các thiết bị này thu thập rất nhiều thông tin, và tất cả dữ liệu này phải được lưu trữ ở đâu đó.

Database quan hệ cổ điển thường được sử dụng để lưu trữ dữ liệu, nhưng chúng không phải lúc nào cũng phù hợp khi nói đến data volumes khổng lồ của chuỗi thời gian. Khi bạn cần xử lý một lượng lớn dữ liệu chuỗi thời gian, database quan hệ có thể quá chậm. Do đó, các database được tối ưu hóa đặc biệt, được gọi là cơ sở dữ liệu NoSQL , đã được tạo ra để tránh các vấn đề của database quan hệ.

TimescaleDB là database open-souce được tối ưu hóa để lưu trữ dữ liệu chuỗi thời gian. Nó được triển khai như một phần mở rộng của PostgreSQL và kết hợp tính dễ sử dụng của database quan hệ và tốc độ của database NoSQL. Do đó, nó cho phép bạn sử dụng PostgreSQL để lưu trữ dữ liệu kinh doanh và dữ liệu chuỗi thời gian ở một nơi.

Theo hướng dẫn này, bạn sẽ cài đặt TimescaleDB trên CentOS 7, cấu hình nó và tìm hiểu cách làm việc với nó. Bạn sẽ chạy qua việc tạo database chuỗi thời gian và thực hiện các truy vấn đơn giản. Cuối cùng, bạn sẽ thấy cách xóa dữ liệu không cần thiết.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

Bước 1 - Cài đặt TimescaleDB

TimescaleDB không có sẵn trong repository mặc định của CentOS, vì vậy trong bước này, bạn sẽ cài đặt nó từ repository bên thứ ba của TimescaleDB.

Đầu tiên, tạo một file repository mới:

  • sudo vi /etc/yum.repos.d/timescaledb.repo

Vào chế độ insert bằng cách nhấn i và dán cấu hình sau vào file :

/etc/yum.repos.d/timescaledb.repo
[timescale_timescaledb] name=timescale_timescaledb baseurl=https://packagecloud.io/timescale/timescaledb/el/7/$basearch repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 

Khi bạn hoàn tất, nhấn ESC để thoát khỏi chế độ insert , sau đó :wqENTER để lưu và thoát khỏi file . Để tìm hiểu thêm về editor vim và vim kế nhiệm của nó, hãy xem hướng dẫn Cài đặt và Sử dụng Trình soạn thảo Văn bản Vim trên Server cloud của ta .

Đến đây bạn có thể tiến hành cài đặt. Hướng dẫn này sử dụng PostgreSQL version 11; nếu bạn đang sử dụng một version PostgreSQL khác (ví dụ: 9.6 hoặc 11), hãy thay thế giá trị trong lệnh sau và chạy nó:

  • sudo yum install -y timescaledb-postgresql-11

TimescaleDB hiện đã được cài đặt và sẵn sàng sử dụng. Tiếp theo, bạn sẽ bật nó lên và điều chỉnh một số cài đặt liên quan đến nó trong file cấu hình PostgreSQL để tối ưu hóa database .

Bước 2 - Cấu hình TimescaleDB

Mô-đun TimescaleDB hoạt động tốt với cài đặt cấu hình PostgreSQL mặc định, nhưng để cải thiện hiệu suất và sử dụng tốt hơn tài nguyên bộ xử lý, bộ nhớ và ổ đĩa, các nhà phát triển của TimescaleDB đề xuất cấu hình một số tham số riêng lẻ. Điều này có thể được thực hiện tự động bằng công cụ timescaledb-tune hoặc bằng cách chỉnh sửa thủ công file postgresql.conf trên server của bạn.

Trong hướng dẫn này, bạn sẽ sử dụng công cụ timescaledb-tune . Nó đọc file postgresql.conf và tương tác đề xuất áp dụng các thay đổi .

Chạy lệnh sau để bắt đầu trình hướng dẫn cấu hình:

  • sudo timescaledb-tune --pg-config=/usr/pgsql-11/bin/pg_config

Đầu tiên, bạn cần xác nhận đường dẫn đến file cấu hình PostgreSQL:

Output
Using postgresql.conf at this path: /var/lib/pgsql/11/data/postgresql.conf Is this correct? [(y)es/(n)o]:

Tiện ích tự động phát hiện đường dẫn đến file cấu hình, vì vậy hãy xác nhận điều này bằng lệnh y :

Output
... Is this correct? [(y)es/(n)o]: y Writing backup to: /tmp/timescaledb_tune.backup201912191633

Tiếp theo, kích hoạt module TimescaleDB bằng lệnh y ở dấu nhắc tiếp theo và nhấn ENTER :

Output
shared_preload_libraries needs to be updated Current: #shared_preload_libraries = '' Recommended: shared_preload_libraries = 'timescaledb' Is this okay? [(y)es/(n)o]: y success: shared_preload_libraries will be updated

Dựa trên các đặc điểm của server của bạn và version PostgreSQL, sau đó bạn sẽ được đề nghị điều chỉnh cài đặt của bạn . Nhấn y để bắt đầu quá trình điều chỉnh:

Output
Tune memory/parallelism/WAL and other settings? [(y)es/(n)o]: y Recommendations based on 7.64 GB of available memory and 4 CPUs for PostgreSQL 11 Memory settings recommendations Current: shared_buffers = 128MB #effective_cache_size = 4GB #maintenance_work_mem = 64MB #work_mem = 4MB Recommended: shared_buffers = 1955MB effective_cache_size = 5865MB maintenance_work_mem = 1001121kB work_mem = 5005kB Is this okay? [(y)es/(s)kip/(q)uit]:

timescaledb-tune sẽ tự động phát hiện bộ nhớ và tính toán có sẵn của server nên giá trị cho các shared_buffers , effective_cache_size , maintenance_work_mem , và work_mem cài đặt. Nếu bạn muốn tìm hiểu thêm về cách thực hiện việc này, hãy xem trang GitHub để biết timescaledb-tune .

Nếu các cài đặt này trông ổn, hãy nhập y :

Output
... Is this okay? [(y)es/(s)kip/(q)uit]: y success: memory settings will be updated

Đến đây, nếu server của bạn có nhiều CPU, bạn sẽ tìm thấy các đề xuất cho cài đặt song song. Tuy nhiên, nếu bạn có một CPU, timescaledb-tune sẽ đưa bạn trực tiếp đến cài đặt WAL.

Những người có nhiều CPU sẽ gặp phải các đề xuất như sau:

Output
Parallelism settings recommendations Current: missing: timescaledb.max_background_workers #max_worker_processes = 8 #max_parallel_workers_per_gather = 2 #max_parallel_workers = 8 Recommended: timescaledb.max_background_workers = 8 max_worker_processes = 15 max_parallel_workers_per_gather = 2 max_parallel_workers = 4 Is this okay? [(y)es/(s)kip/(q)uit]:

Các cài đặt này quy định số lượng công nhân xử lý các yêu cầu và các việc nền. Bạn có thể tìm hiểu thêm về các cài đặt này từ tài liệu TimescaleDBPostgreSQL .

Nhập y rồi ENTER để chấp nhận các cài đặt này:

Output
... Is this okay? [(y)es/(s)kip/(q)uit]: y success: parallelism settings will be updated

Tiếp theo, bạn sẽ tìm thấy các đề xuất cho Ghi log phía trước (WAL) :

Output
WAL settings recommendations Current: #wal_buffers = -1 #min_wal_size = 80MB #max_wal_size = 1GB Recommended: wal_buffers = 16MB min_wal_size = 4GB max_wal_size = 8GB Is this okay? [(y)es/(s)kip/(q)uit]:

WAL duy trì tính toàn vẹn của dữ liệu, nhưng cài đặt mặc định có thể gây ra I / O không hiệu quả làm chậm hiệu suất ghi. Nhập và nhập y để tối ưu hóa các cài đặt này:

Output
... Is this okay? [(y)es/(s)kip/(q)uit]: y success: WAL settings will be updated

Đến đây bạn sẽ tìm thấy một số đề xuất khác:

Output
Miscellaneous settings recommendations Current: #default_statistics_target = 100 #random_page_cost = 4.0 #checkpoint_completion_target = 0.5 #max_locks_per_transaction = 64 #autovacuum_max_workers = 3 #autovacuum_naptime = 1min #effective_io_concurrency = 1 Recommended: default_statistics_target = 500 random_page_cost = 1.1 checkpoint_completion_target = 0.9 max_locks_per_transaction = 64 autovacuum_max_workers = 10 autovacuum_naptime = 10 effective_io_concurrency = 200 Is this okay? [(y)es/(s)kip/(q)uit]:

Tất cả các thông số khác nhau này đều nhằm mục đích tăng hiệu suất. Ví dụ: SSD có thể xử lý nhiều yêu cầu đồng thời, do đó, giá trị tốt nhất cho đơn vị tiền tệ effective_io_concurrency có thể là hàng trăm. Bạn có thể tìm thêm thông tin về các tùy chọn này trong tài liệu PostgreSQL .

Nhấn y rồi nhấn ENTER để tiếp tục.

Output
... Is this okay? [(y)es/(s)kip/(q)uit]: y success: miscellaneous settings will be updated Saving changes to: /var/lib/pgsql/11/data/postgresql.conf

Kết quả là, bạn sẽ nhận được một file cấu hình được tạo sẵn tại /var/lib/pgsql/ 11 /data/postgresql.conf .

Lưu ý: Nếu bạn đang làm việc cài đặt từ đầu, bạn cũng có thể chạy lệnh ban đầu với --quiet--yes cờ, mà sẽ tự động áp dụng tất cả các khuyến nghị và sẽ làm thay đổi đối với postgresql.conf file cấu hình:

  • sudo timescaledb-tune --pg-config=/usr/pgsql-11/bin/pg_config --quiet --yes

Để các thay đổi cấu hình có hiệu lực, bạn phải khởi động lại dịch vụ PostgreSQL:

  • sudo systemctl restart postgresql-11.service

Bây giờ database đang chạy với các tham số tối ưu và sẵn sàng làm việc với dữ liệu chuỗi thời gian. Trong các bước tiếp theo, bạn sẽ thử làm việc với dữ liệu này: tạo database và siêu bảng mới và thực hiện các thao tác.

Bước 3 - Tạo database mới và siêu bảng

Với cài đặt TimescaleDB của bạn được tối ưu hóa, bạn đã sẵn sàng làm việc với dữ liệu chuỗi thời gian. TimescaleDB được thực hiện như một phần mở rộng của PostgreSQL, vì vậy các phép toán với dữ liệu chuỗi thời gian không khác nhiều so với các phép toán dữ liệu quan hệ. Đồng thời, database cho phép bạn tự do kết hợp dữ liệu từ chuỗi thời gian và bảng quan hệ trong tương lai.

Đầu tiên, bạn sẽ tạo một database mới và bật tiện ích mở rộng TimescaleDB cho nó. Đăng nhập vào database PostgreSQL của bạn:

  • sudo -u postgres psql

Bây giờ hãy tạo một database mới và kết nối với nó. Hướng dẫn này sẽ đặt tên cho database timeseries :

  • CREATE DATABASE timeseries;
  • \c timeseries

Bạn có thể tìm thêm thông tin về cách làm việc với database PostgreSQL trong hướng dẫn Cách tạo, Xóa & Quản lý Bảng trong PostgreSQL trên Server cloud của ta .

Cuối cùng, bật tiện ích mở rộng TimescaleDB:

  • CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

Bạn sẽ thấy kết quả sau:

Output
WARNING: WELCOME TO _____ _ _ ____________ |_ _(_) | | | _ \ ___ \ | | _ _ __ ___ ___ ___ ___ __ _| | ___| | | | |_/ / | | | | _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \ | | | | | | | | | __/\__ \ (_| (_| | | __/ |/ /| |_/ / |_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/ Running version 1.5.1 For more information on TimescaleDB, please visit the following links: 1. Getting started: https://docs.timescale.com/getting-started 2. API reference documentation: https://docs.timescale.com/api 3. How TimescaleDB is designed: https://docs.timescale.com/introduction/architecture Note: TimescaleDB collects anonymous reports to better understand and assist our users. For more information and how to disable, please see our docs https://docs.timescaledb.com/using-timescaledb/telemetry. CREATE EXTENSION

Điểm tương tác chính với dữ liệu thời gian của bạn là siêu bảng , một phần trừu tượng của nhiều bảng riêng lẻ chứa dữ liệu, được gọi là khối .

Để tạo một siêu bảng, hãy bắt đầu với một bảng SQL thông thường và sau đó chuyển nó thành một siêu bảng thông qua hàm create_hypertable .

Tạo một bảng sẽ lưu trữ dữ liệu để theo dõi nhiệt độ và độ ẩm trên một bộ sưu tập thiết bị theo thời gian:

  • CREATE TABLE conditions (
  • time TIMESTAMP WITH TIME ZONE NOT NULL,
  • device_id TEXT,
  • temperature NUMERIC,
  • humidity NUMERIC
  • );

Lệnh này sẽ tạo một bảng được gọi là conditions với bốn cột. Cột đầu tiên sẽ lưu trữ dấu thời gian, bao gồm múi giờ và không được để trống. Tiếp theo, bạn sẽ sử dụng cột thời gian để chuyển đổi bảng của bạn thành một siêu bảng được phân vùng theo thời gian:

  • SELECT create_hypertable('conditions', 'time');

Lệnh này gọi hàm create_hypertable() , tạo một siêu bảng TimescaleDB từ một bảng PostgreSQL, thay thế cho hàm sau.

Bạn sẽ nhận được kết quả sau:

Output
create_hypertable ------------------------- (1,public,conditions,t) (1 row)

Trong bước này, bạn đã tạo một siêu bảng mới để lưu trữ dữ liệu về thời gian. Đến đây bạn có thể điền dữ liệu vào nó bằng cách ghi vào hypertable, sau đó chạy qua quá trình xóa nó.

Bước 4 - Ghi và xóa dữ liệu

Trong bước này, bạn sẽ chèn dữ liệu bằng cách sử dụng các lệnh SQL chuẩn và nhập các bộ dữ liệu lớn từ các nguồn bên ngoài. Điều này sẽ cho bạn thấy các khía cạnh database quan hệ của TimescaleDB.

Đầu tiên, hãy thử các lệnh cơ bản. Dữ liệu có thể được chèn vào siêu bảng bằng INSERT SQL chuẩn. Chèn một số dữ liệu temperaturehumidity mẫu cho thiết bị lý thuyết weather-pro-000000 bằng lệnh sau:

  • INSERT INTO conditions(time, device_id, temperature, humidity)
  • VALUES (NOW(), 'weather-pro-000000', 84.1, 84.1);

Bạn sẽ nhận được kết quả sau:

Output
INSERT 0 1

Bạn cũng có thể chèn nhiều hàng dữ liệu cùng một lúc. Hãy thử những cách sau:

  • INSERT INTO conditions
  • VALUES
  • (NOW(), 'weather-pro-000002', 71.0, 51.0),
  • (NOW(), 'weather-pro-000003', 70.5, 50.5),
  • (NOW(), 'weather-pro-000004', 70.0, 50.2);

Bạn sẽ nhận được những thứ sau:

Output
INSERT 0 3

Bạn cũng có thể chỉ định rằng INSERT sẽ trả về một số hoặc tất cả dữ liệu được chèn bằng cách sử dụng câu lệnh RETURNING :

  • INSERT INTO conditions
  • VALUES (NOW(), 'weather-pro-000002', 70.1, 50.1) RETURNING *;

Bạn sẽ thấy kết quả sau:

Output
time | device_id | temperature | humidity -------------------------------+--------------------+-------------+---------- 2019-09-15 14:14:01.576651+00 | weather-pro-000002 | 70.1 | 50.1 (1 row)

Nếu bạn muốn xóa dữ liệu khỏi siêu bảng, hãy sử dụng DELETE SQL chuẩn. Chạy các bước sau để xóa bất kỳ dữ liệu nào có temperature cao hơn 80 hoặc humidity cao hơn 50 :

  • DELETE FROM conditions WHERE temperature > 80;
  • DELETE FROM conditions WHERE humidity > 50;

Sau thao tác xóa, bạn nên sử dụng lệnh VACUUM , lệnh này sẽ lấy lại dung lượng vẫn được sử dụng bởi dữ liệu đã bị xóa.

  • VACUUM conditions;

Bạn có thể tìm thêm thông tin về lệnh VACUUM trong tài liệu PostgreSQL .

Các lệnh này phù hợp với mục nhập dữ liệu quy mô nhỏ, nhưng vì dữ liệu chuỗi thời gian thường tạo ra các bộ dữ liệu khổng lồ từ nhiều thiết bị đồng thời, nên bạn cũng cần biết cách chèn hàng trăm hoặc hàng nghìn hàng cùng một lúc. Nếu bạn đã chuẩn bị dữ liệu từ các nguồn bên ngoài ở dạng có cấu trúc, chẳng hạn như ở định dạng csv , thì tác vụ này có thể được hoàn thành nhanh chóng.

Để kiểm tra điều này, bạn sẽ sử dụng một tập dữ liệu mẫu đại diện cho dữ liệu nhiệt độ và độ ẩm từ nhiều vị trí khác nhau. Nó được tạo ra bởi các nhà phát triển TimescaleDB để cho phép bạn kiểm tra database của họ. Bạn có thể xem thêm thông tin về bộ dữ liệu mẫu trong tài liệu TimescaleDB .

Hãy xem cách bạn có thể nhập dữ liệu từ tập dữ liệu mẫu weather_small vào database của bạn . Đầu tiên, hãy thoát khỏi Postgresql:

  • \q

Sau đó download tập dữ liệu và extract nó:

  • cd /tmp
  • curl https://timescaledata.blob.core.windows.net/datasets/weather_small.tar.gz -o weather_small.tar.gz
  • tar -xvzf weather_small.tar.gz

Tiếp theo, nhập dữ liệu nhiệt độ và độ ẩm vào database của bạn:

  • sudo -u postgres psql -d timeseries -c "\COPY conditions FROM weather_small_conditions.csv CSV"

Đây kết nối với timeseries database và thực thi \COPY lệnh sao chép dữ liệu từ các file được lựa chọn vào conditions hypertable. Nó sẽ chạy trong vài giây.

Khi dữ liệu đã được nhập vào bảng của bạn, bạn sẽ nhận được kết quả sau:

Output
COPY 1000000

Trong bước này, bạn đã thêm dữ liệu vào siêu bảng theo cách thủ công và theo lô. Tiếp theo, tiếp tục thực hiện các truy vấn.

Bước 5 - Truy vấn dữ liệu

Bây giờ bảng của bạn chứa dữ liệu, bạn có thể thực hiện các truy vấn khác nhau để phân tích nó.

Để bắt đầu, hãy đăng nhập vào database :

  • sudo -u postgres psql -d timeseries

Như đã đề cập trước đây, để làm việc với siêu bảng, bạn có thể sử dụng các lệnh SQL tiêu chuẩn. Ví dụ: để hiển thị 10 mục nhập cuối cùng từ siêu bảng conditions , hãy chạy lệnh sau:

  • SELECT * FROM conditions LIMIT 10;

Bạn sẽ thấy kết quả sau:

Output
time | device_id | temperature | humidity ------------------------+--------------------+--------------------+---------- 2016-11-15 12:00:00+00 | weather-pro-000000 | 39.9 | 49.9 2016-11-15 12:00:00+00 | weather-pro-000001 | 32.4 | 49.8 2016-11-15 12:00:00+00 | weather-pro-000002 | 39.800000000000004 | 50.2 2016-11-15 12:00:00+00 | weather-pro-000003 | 36.800000000000004 | 49.8 2016-11-15 12:00:00+00 | weather-pro-000004 | 71.8 | 50.1 2016-11-15 12:00:00+00 | weather-pro-000005 | 71.8 | 49.9 2016-11-15 12:00:00+00 | weather-pro-000006 | 37 | 49.8 2016-11-15 12:00:00+00 | weather-pro-000007 | 72 | 50 2016-11-15 12:00:00+00 | weather-pro-000008 | 31.3 | 50 2016-11-15 12:00:00+00 | weather-pro-000009 | 84.4 | 87.8 (10 rows)

Lệnh này cho phép bạn xem dữ liệu nào trong database . Vì database chứa một triệu bản ghi, bạn đã sử dụng LIMIT 10 để giới hạn kết quả ở 10 mục nhập.

Để xem các mục nhập mới nhất , hãy sắp xếp mảng dữ liệu theo thời gian theo thứ tự giảm dần:

  • SELECT * FROM conditions ORDER BY time DESC LIMIT 20;

Điều này sẽ xuất ra 20 mục nhập mới nhất .

Bạn cũng có thể thêm một bộ lọc. Ví dụ: để xem các mục nhập từ thiết bị weather-pro-000000 , hãy chạy như sau:

  • SELECT * FROM conditions WHERE device_id = 'weather-pro-000000' ORDER BY time DESC LIMIT 10;

Trong trường hợp này, bạn sẽ thấy 10 điểm dữ liệu nhiệt độ và độ ẩm mới nhất được ghi lại bởi thiết bị weather-pro-000000 .

Ngoài các lệnh SQL chuẩn, TimescaleDB cũng cung cấp một số hàm đặc biệt hữu ích cho việc phân tích dữ liệu theo thời gian. Ví dụ: để tìm giá trị trung bình của các giá trị nhiệt độ, bạn có thể sử dụng truy vấn sau với hàm percentile_cont :

  • SELECT percentile_cont(0.5)
  • WITHIN GROUP (ORDER BY temperature)
  • FROM conditions
  • WHERE device_id = 'weather-pro-000000';

Bạn sẽ thấy kết quả sau:

Output
percentile_cont ----------------- 40.5 (1 row)

Bằng cách này, bạn sẽ thấy nhiệt độ trung bình cho toàn bộ thời gian quan sát nơi đặt cảm biến weather-pro-00000 .

Để hiển thị các giá trị mới nhất từ mỗi cảm biến, bạn có thể sử dụng chức năng last :

  • select device_id, last(temperature, time)
  • FROM conditions
  • GROUP BY device_id;

Trong kết quả , bạn sẽ thấy danh sách tất cả các cảm biến và các giá trị mới nhất có liên quan.

Để nhận các giá trị đầu tiên, hãy sử dụng hàm first .

Ví dụ sau phức tạp hơn. Nó sẽ hiển thị nhiệt độ trung bình hàng giờ, tối thiểu và tối đa cho cảm biến đã chọn trong vòng 24 giờ qua:

  • SELECT time_bucket('1 hour', time) "hour",
  • trunc(avg(temperature), 2) avg_temp,
  • trunc(min(temperature), 2) min_temp,
  • trunc(max(temperature), 2) max_temp
  • FROM conditions
  • WHERE device_id = 'weather-pro-000000'
  • GROUP BY "hour" ORDER BY "hour" DESC LIMIT 24;

Ở đây bạn đã sử dụng hàm time_bucket , hàm này hoạt động như một version mạnh mẽ hơn của hàm date_trunc PostgreSQL. Kết quả là, bạn sẽ thấy những khoảng thời gian nào trong ngày nhiệt độ tăng hoặc giảm:

Output
hour | avg_temp | min_temp | max_temp ------------------------+----------+----------+---------- 2016-11-16 21:00:00+00 | 42.00 | 42.00 | 42.00 2016-11-16 20:00:00+00 | 41.92 | 41.69 | 42.00 2016-11-16 19:00:00+00 | 41.07 | 40.59 | 41.59 2016-11-16 18:00:00+00 | 40.11 | 39.79 | 40.59 2016-11-16 17:00:00+00 | 39.46 | 38.99 | 39.79 2016-11-16 16:00:00+00 | 38.54 | 38.19 | 38.99 2016-11-16 15:00:00+00 | 37.56 | 37.09 | 38.09 2016-11-16 14:00:00+00 | 36.62 | 36.39 | 37.09 2016-11-16 13:00:00+00 | 35.59 | 34.79 | 36.29 2016-11-16 12:00:00+00 | 34.59 | 34.19 | 34.79 2016-11-16 11:00:00+00 | 33.94 | 33.49 | 34.19 2016-11-16 10:00:00+00 | 33.27 | 32.79 | 33.39 2016-11-16 09:00:00+00 | 33.37 | 32.69 | 34.09 2016-11-16 08:00:00+00 | 34.94 | 34.19 | 35.49 2016-11-16 07:00:00+00 | 36.12 | 35.49 | 36.69 2016-11-16 06:00:00+00 | 37.02 | 36.69 | 37.49 2016-11-16 05:00:00+00 | 38.05 | 37.49 | 38.39 2016-11-16 04:00:00+00 | 38.71 | 38.39 | 39.19 2016-11-16 03:00:00+00 | 39.72 | 39.19 | 40.19 2016-11-16 02:00:00+00 | 40.67 | 40.29 | 40.99 2016-11-16 01:00:00+00 | 41.63 | 40.99 | 42.00 2016-11-16 00:00:00+00 | 42.00 | 42.00 | 42.00 2016-11-15 23:00:00+00 | 42.00 | 42.00 | 42.00 2016-11-15 22:00:00+00 | 42.00 | 42.00 | 42.00 (24 rows)

Bạn có thể tìm thấy các chức năng hữu ích hơn trong tài liệu TimescaleDB .

Đến đây bạn biết cách xử lý dữ liệu của bạn . Tiếp theo, bạn sẽ xem qua cách xóa dữ liệu không cần thiết và cách nén dữ liệu.

Bước 6 - Cấu hình nén và xóa dữ liệu

Khi dữ liệu tích tụ, nó sẽ ngày càng chiếm nhiều dung lượng trên ổ cứng của bạn. Để tiết kiệm dung lượng, version mới nhất của TimescaleDB cung cấp tính năng nén dữ liệu. Tính năng này không yêu cầu điều chỉnh cài đặt hệ thống file nào và được dùng để nhanh chóng làm cho database của bạn hiệu quả hơn. Để biết thêm thông tin về cách nén này hoạt động, hãy xem bài viết Nén này từ TimescaleDB .

Đầu tiên, kích hoạt tính năng nén siêu bảng của bạn:

  • ALTER TABLE conditions SET (
  • timescaledb.compress,
  • timescaledb.compress_segmentby = 'device_id'
  • );

Bạn sẽ nhận được dữ liệu sau:

Output
NOTICE: adding index _compressed_hypertable_2_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_2 USING BTREE(device_id, _ts_meta_sequence_num) ALTER TABLE

Lưu ý: Bạn cũng có thể cài đặt TimescaleDB để nén dữ liệu trong repository ảng thời gian được chỉ định. Ví dụ, bạn có thể chạy:

  • SELECT add_compress_chunks_policy('conditions', INTERVAL '7 days');

Trong ví dụ này, dữ liệu sẽ được tự động nén sau một tuần.

Bạn có thể xem thống kê về dữ liệu đã nén bằng lệnh:

  • SELECT *
  • FROM timescaledb_information.compressed_chunk_stats;

Sau đó, bạn sẽ thấy danh sách các khối với các trạng thái của chúng: trạng thái nén và dung lượng được chiếm bởi dữ liệu không nén và được nén theo byte.

Nếu không có nhu cầu lưu trữ dữ liệu trong thời gian dài, bạn có thể xóa dữ liệu đã lỗi thời để giải phóng thêm dung lượng. Có một chức năng drop_chunks đặc biệt cho việc này. Nó cho phép bạn xóa các phần có dữ liệu cũ hơn thời gian được chỉ định:

  • SELECT drop_chunks(interval '24 hours', 'conditions');

Truy vấn này sẽ loại bỏ tất cả các phần từ các conditions siêu bảng chỉ bao gồm dữ liệu cũ hơn một ngày trước.

Bạn sẽ nhận được kết quả sau:

Output
drop_chunks ---------------------------------------- _timescaledb_internal._hyper_1_2_chunk (1 row)

Để tự động xóa dữ liệu cũ, bạn có thể cấu hình tác vụ cron . Xem hướng dẫn của ta để tìm hiểu thêm về cách sử dụng cron để tự động hóa các việc hệ thống khác nhau .

Thoát khỏi database :

  • \q

Tiếp theo, chỉnh sửa crontab của bạn bằng lệnh sau, lệnh này sẽ được chạy từ shell:

  • crontab -e

Bây giờ hãy thêm dòng sau vào cuối file :

crontab
...  0 1 * * * /usr/bin/psql -h localhost -p 5432 -U postgres -d postgres -c "SELECT drop_chunks(interval '24 hours', 'conditions');" >/dev/null 2>&1 

Công việc này sẽ xóa dữ liệu cũ hơn một ngày vào lúc 1:00 sáng hàng ngày.

Kết luận

Đến đây bạn đã cài đặt TimescaleDB trên server CentOS của bạn . Bạn cũng đã thử tạo siêu bảng, chèn dữ liệu vào đó, truy vấn dữ liệu, nén và xóa các bản ghi không cần thiết. Với những ví dụ này, bạn có thể tận dụng các lợi ích chính của TimescaleDB so với các hệ thống quản lý database quan hệ truyền thống để lưu trữ dữ liệu chuỗi thời gian, bao gồm:

  • Tốc độ nhập dữ liệu cao hơn
  • Hiệu suất truy vấn nhanh hơn
  • Các tính năng hướng thời gian

Tags:

Các tin liên quan

Cách thiết lập Nền tảng Eclipse Theia Cloud IDE trên CentOS 7
2020-01-24
Cách thiết lập ứng dụng Node.js để sản xuất trên CentOS 7
2019-10-28
Cách cấu hình Cụm Galera với MariaDB trên server CentOS 7
2019-07-10
Cách sử dụng Chế độ độc lập của Certbot để lấy chứng chỉ SSL của Let's Encrypt trên CentOS 7
2019-05-31
Cách cài đặt và cấu hình Zabbix để giám sát an toàn server từ xa trên CentOS 7
2019-05-29
Cách tạo một cụm Kubernetes bằng Kubeadm trên CentOS 7
2019-04-24
Cách cài đặt và sử dụng ClickHouse trên CentOS 7
2019-04-15
Cách thu thập số liệu cơ sở hạ tầng với Metricbeat trên CentOS 7
2019-03-27
Các bước được đề xuất bổ sung cho server CentOS 7 mới
2019-02-20
Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên CentOS 7
2018-12-10