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

Lượt xem
Home

TimescaleDB là một extension của PostgreSQL được tối ưu hóa để lưu trữ dữ liệu dạng chuỗi thời gian. Đây là một giải pháp hiệu quả hơn cho việc lưu trữ so với việc sử dụng classic relational databases (cơ sở dữ liệu quan hệ tiêu chuẩn). Để có thể cài đặt và sử dụng TimescaleDB trên CentOS 7, hãy cùng tìm hiểu bài viết dưới đây của Vietnix.

Tổng quan về TimescaleDB

Hiện nay có khá 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 sẽ tích lũy dữ liệu để phân tích. 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 chuỗi thời gian, với mỗi điểm dữ liệu sẽ đi kèm với một mốc thời gian. Hãy cùng xem ví dụ sau đâ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
...

Sự liên quan của time series data (dữ liệu dạng chuỗi thời gian) gần đây đã tăng lên nhờ các triển khai mới của Internet of Things  (IoT) và Industrial Internet of Things. Hiện nay, có ngày càng nhiều thiết bị thu thập thông tin chuỗi thời gian khác nhau như: Các thiết bị theo dõi sức khỏe, đồng hồ thông minh, dự báo thời tiết và các cảm biến khác. Chúng 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ữ ở một nơi nào đó.

Classic relational databases thường được sử dụng để lưu trữ dữ liệu, nhưng không phải lúc nào cũng phù hợp khi đối mặt với khối lượng dữ liệu khổng lồ của chuỗi thời gian. Khi bạn cần xử lý một lượng lớn time series data (dữ liệu chuỗi thời gian), hiệu suất của relational databases sẽ rất chậm. Do đó, những databases được tối ưu hóa – NoSQL databases, đã được tạo ra để tránh các vấn đề trên.

TimescaleDB là một database với mã nguồn mở được tối ưu hóa để lưu trữ time series data. TimescaleDB được phát triển như là một extension của PostgreSQL và là sự kết hợp giữa tính dễ sử dụng của relational databases và tốc độ xử lí của NoSQL databases. Chính bởi vậy nó cho phép bạn sử dụng PostgreSQL cho cả việc lưu trữ business data (dữ liệu doanh nghiệp) và time series data ở cùng một nơi.

Trong bài viết này, bạn sẽ được hướng dẫn cách thiết lập TimescaleDB trên CentOS 7, thực hiện việc cấu hình và tìm hiểu cách làm việc với TimescaleDB. Bạn cũng sẽ được hướng dẫn cách tạo time series databases và thực hiện một vài truy vấn đơn giản. Cuối cùng, hãy cùng tìm hiểu cách để loại bỏ các dữ liệu không cần thiết.

Yêu cầu để cài đặt và sử dụng TimescaleDB trên CentOS 7

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

  • Một máy chủ CentOS 7 bao gồm người dùng non-root có quyền sudo và tường lửa được thiết lập với firewalld.
  • Cài đặt PostgreSQL trên máy chủ của bạn.

Lưu ý: Để có thể thoải mái thực hiện các thao tác cài đặt cũng như sở hữu không gian lưu trữ rộng lớn, bạn cần một máy chủ linh hoạt với khả năng mở rộng nguồn tài nguyên dễ dàng. Lúc này, VPS sẽ là giải pháp lưu trữ phù hợp nhất dành cho bạn.

Vietnix đang là nhà cung cấp dịch vụ thuê máy ảo (VPS) tốc độ cao, ổn định, uy tín, chuyên nghiệp được nhiều khách hàng tin dùng tại thị trường Việt Nam. Với đa dạng gói cấu hình, mức giá cùng khả năng toàn quyền quản trị hệ thống và năng cấp tài nguyên nhanh chóng, VPS Vietnix là lựa chọn tối ưu nếu bạn đang tìm kiếm máy chủ lưu trữ có tốc độ và hiệu năng xử lý cao. Liên hệ với đội ngũ Vietnix để được tư vấn chi tiết nhất.

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

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

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

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

Nhấn i để bước vào chế độ chèn và dán đoạn cấu hình sau vào tệp:

[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ế độ chèn, sau đó :wqENTER để lưu và thoát tệp.

Bây giờ bạn đã có thể tiến hành cài đặt. Ở hướng dẫn này sử dụng PostgreSQL phiên bản 11; nếu bạn đang sử dụng phiên bản PostgreSQL khác (ví dụ: 9.6 hoặc 11), hãy thay thế giá trị “11” trong lệnh sau và thực thi:

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ẽ kích hoạt và điều chỉnh một số cài đặt được liên kết trong tệp cấu hình PostgreSQL để tối ưu hóa database.

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

TimescaleDB module 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ài nguyên bộ xử lý, bộ nhớ và đĩa tài nguyên một cách tốt hơn, bạn nên tự cấu hình một vài tham số sẽ được giới thiệu trong phần này. Điều này có thể được thực hiện tự động với công cụ timescaledb-tune hoặc bằng cách chỉnh sửa thủ công tệp postgresql.conf ở server của bạn .

Trong hướng dẫn này, bạn sẽ sử dụng công cụ timescaledc-tune. Công cụ này sẽ đọc tệp postgresql.conf và tương tác với các đề xuất thực hiện việc thay đổi.

Chạy lệnh sau để khởi động 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 sẽ được yêu cầu xác nhận đường dẫn đến tệp 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]:

Đường dẫn sẽ được tự động phát hiện, xác nhận nó bằng cách nhập y:

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

Tiếp theo, bật TimescaleDB module bằng cách nhập y vào thông báo 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 server và phiên bản PostgreSQL, bạn sẽ được đề nghị điều chỉnh cài đặt của mình. 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ớ khả dụng của server và tính toán các giá trị được đề xuất cho cài đặt shared_buffers, effective_cache_size, maintenance_work_memwork_mem.

Nếu các cài đặt này đều ổn và không gặp lỗi, hãy nhập y:

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

Tại thời điểm này, nếu server có nhiều hơn một CPU, bạn sẽ tìm thấy các đề xuất cho cài đặt song song. Tuy nhiên, nếu chỉ có một CPU, timescaledb-tune sẽ hướng dẫn bạn trực tiếp cài đặt WAL.

Trong trường hợp có nhiều CPU sẽ gặp phải đoạn thông tin như thế này:

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 sẽ điều chỉnh số lượng workers để xử lý yêu cầu và các tác vụ nền.

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

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 Write Ahead Log (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 dữ liệu, nhưng cài đặt mặc định có thể gây ra I/O không hiệu quả dẫn đến chậm hiệu suất ghi. 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

Bây giờ 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ố trên đề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, vì vậy giá trị tốt nhất cho effective_io_concurrency có thể là hàng trăm.

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 tệp cấu hình được tạo sẵn tại /var/lib/pgsql/11/data/postgresql.conf.

Lưu ý: Nếu đây là lần đầu thực hiện việc cài đặt này, bạn cũng có thể chạy lệnh với --quiet--yes. Chúng sẽ tự động áp dụng tất cả các đề xuất và sẽ thay đổi tệp cấu hình postgresql.conf:

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

Để việc thay đổi cấu hình trên có hiệu lực, bạn cần phải khởi động lại PostgreSQL bằng cách:

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 time series data. Trong các bước tiếp theo, bạn sẽ thử thực hiện các thao tác này: Tạo databases, hypertables và thực hiện một vài lệnh khác.

Bước 3 – Tạo database và hypertable

Với việc thiết lập TimescaleDB được tối ưu hóa, bạn đã sẵn sàng làm việc với time series data. TimescaleDB được triển khai như một extension của PostgreSQL, vì vậy các thao tác với time series data không khác nhiều so với các thao tác trê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 dữ liệu quan hệ trong tương lai.

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

sudo -u postgres psql

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

CREATE DATABASE timeseries;
\c timeseries

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

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

Bạn sẽ nhận được output như 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 time series data là các hypertable, một sự trừu tượng hóa của nhiều bảng riêng lẻ chứa dữ liệu (chunks).

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

Tiến hành tạo một bảng để lưu trữ dữ liệu về việc theo dõi nhiệt độ và độ ẩm trên 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 gọi là conditions với bốn cột. Cột đầu tiên sẽ lưu mốc thời gian, múi giờ và không được để trống. Tiếp theo, bạn sẽ sử dụng cột này để chuyển đổi bảng của mình thành một hypertable đượ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 ra TimescaleDB hypertable từ PostgreSQL table và thay thế cho bảng gốc.

Output sẽ được hiển thị như sau:

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

Trong bước này, bạn đã tạo một hypertable mới để lưu trữ time series data. Bây giờ bạn có thể điền dữ liệu vào bằng cách ghi vào hypertable, sau đó tiến hành quá trình xóa dữ liệu.

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 lệnh SQL tiêu chuẩn và nhập các bộ dữ liệu lớn từ những nguồn bên ngoài. Điều này sẽ cho bạn thấy các khía cạnh về relational database trên TimescaleDB.

Đầu tiên, hãy thử các lệnh cơ bản. Dữ liệu có thể được chèn vào hypertable bằng lệnh SQL là INSERT. Chèn một số dữ liệu mẫu về temperature và humidity cho thiết bị 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);

Output được xuất hiện như 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ử các 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 output sau đây:

Output
INSERT 0 3

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

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

Output sẽ được hiển thị như 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 hypertable, hãy sử dụng lệnh SQL là DELETE. Thực thi lệnh như 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 khi thực hiện xong 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òn được sử dụng từ dữ liệu đã bị xóa.

VACUUM conditions;

Các lệnh này phù hợp để nhập dữ liệu có quy mô nhỏ. Tuy nhiên time series data thường tạo ra các bộ dữ liệu khổng lồ từ nhiều thiết bị cùng một lúc nên bạn sẽ cần biết cách chèn hàng trăm hoặc hàng nghìn hàng dữ liệu cùng một lúc. Nếu bạn đã chuẩn bị sẵn dữ liệu từ nhiều nguồn bên ngoài ở dạng cấu trúc, ví dụ như ở định dạng csv, tác vụ này có thể được thực hiện 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ùng khác nhau. Tập dữ liệu này đượ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ọ.

Hãy cùng xem cách nhập liệu từ tập dữ liệu mẫu weather_small vào database của mình. Đầu tiên, thoát Postgresql:

\q

Sau đó tải xuống tập dữ liệu và giải né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 relational database của bạn:

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

Lệnh này giúp kết nối với database timeseries và thực hiện \COPY để sao chép dữ liệu từ tệp đã chọn vào conditions hypertable. Quá trình trên sẽ chạy trong vài giây.

Khi dữ liệu đã được nhập vào bảng, output sẽ hiển thị như sau:

Output
COPY 1000000

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

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

Bây giờ khi bảng đã 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 chúng.

Để bắt đầu, hãy thực hiện đăng nhập vào database:

sudo -u postgres psql -d timeseries

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

SELECT * FROM conditions LIMIT 10;

Output sẽ xuất hiện như 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 được lưu trữ 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ả là 10 mục.

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

SELECT * FROM conditions ORDER BY time DESC LIMIT 20;

Truy vấn này sẽ cho ra 20 mục gần đây nhất.

Bạn cũng có thể thêm bộ lọc. Ví dụ: Để xem các mục từ thiết bị weather-pro-000000, hãy  chạy lệ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 dữ liệu về nhiệt độ và độ ẩm gần đây nhất được ghi lại bởi  thiết bị weather-pro-000000.

Ngoài các lệnh SQL, TimescaleDB cũng cung cấp một số chức năng đặc biệt hữu ích cho việc phân tích time series data. Ví dụ: Để tính trung bình 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ẽ nhận được output sau:

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

Bằng cách này, bạn sẽ nhận được nhiệt độ trung bình trong toàn bộ thời gian ở 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ử hàm last:

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

Kết quả sẽ cho thấy danh sách tất cả cảm biến và các giá trị mới nhất có liên quan. Để lấy giá trị đầu tiên, hãy dùng hàm first.

Ví dụ sau đây sẽ phức tạp hơn khi yêu cầu hiển thị nhiệt độ trung bình, nhiệt độ thấp nhất và nhiệt độ cao nhất mỗi giờ 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, hoạt động như một phiên bản mạnh hơn so với hàm date_trunc của PostgreSQL. Kết quả là, bạn sẽ thấy 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)

Hiện tại, bạn đã biết cách để xử lý dữ liệu. Tiếp theo, bạn sẽ được hướng dẫn cách xóa dữ liệu không cần thiết và cách nén chúng.

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

Theo thời gian tích lũy, dữ liệu sẽ ngày càng chiếm nhiều dung lượng trên ổ cứng của bạn. Để khắc phục điều này, phiên bản mới nhất của TimescaleDB cung cấp tính năng nén dữ liệu. Tính năng nén không yêu cầu tinh chỉnh bất kỳ cài đặt tệp hệ thống nào và có thể được sử dụng để tối ưu cho database nhanh chóng.

Trước tiên, hãy bật tính năng nén hypertable:

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

Output sẽ được xuất hiện như 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ể thiết lập TimescaleDB để nén dữ liệu trong khoảng thời gian được chỉ định. Ví dụ, bạn có thể thực thi như sau để nén dữ liệu mỗi tuần:

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

Bạn có thể xem số liệu 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 một danh sách các chunk kèm theo trạng thái của chúng: Trạng thái nén và kích thước dung lượng của các dữ liệu không nén và đã nén (tính bằng byte).

Nếu không có nhu cầu lưu trữ dữ liệu trong một khoảng thời gian dài, bạn có thể xóa để giải phóng không gian trống bằng tính năng drop_chunks. Nó cho phép bạn xóa các đoạn có dữ liệu đã được lưu trữ trong thời gian dài hơn thời gian được quy định:

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

Truy vấn này sẽ loại bỏ tất cả các chunk từ hypertable conditions và chỉ bao gồm dữ liệu được lưu hơn một ngày trước.

Output được hiển thị như sau:

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

Để tự động xóa các dữ liệu cũ, bạn có thể cấu hình trên tác vụ cron.

Thực hiện thoát khỏi database bằng cách:

\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 tệp:

...

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

Việc này sẽ thực hiện xóa dữ liệu được lưu hơn một ngày vào lúc 1:00 sáng mỗi ngày.

Lời kết

Đến đây, bạn đã thiết lập được TimescaleDB trên máy chủ CentOS và thử tạo hypertables, chèn dữ liệu, truy vấn dữ liệu, nén và xóa các bản ghi không cần thiết. Hy vọng bài viết sẽ giúp bạn tận dụng TimescaleDB hỗ trợ lập trình hiệu quả hơn. Cảm ơn các bạn đọc bài hướng dẫn, hãy cùng chia sẻ bài viết đến mọi người để cùng nhau trau dồi thêm kiến thức. Nếu có góp ý hay bất kì thắc mắc nào, bạn hãy để lại bình luận bên dưới nhé.

Chia sẻ lên

Theo dõi trên

Logo Google new

Đánh giá

5/5 - (133 bình chọn)

Hưng Nguyễn

Kết nối với mình qua

Icon Quote
Icon Quote
Đăng ký nhận tin
Để không bỏ sót bất kỳ tin tức hoặc chương trình khuyến mãi từ Vietnix

Bình luận

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

Chỉ số tăng trưởng

Điểm Desktop

100 (+39)

Điểm Mobile

100 (+67)

Core Web Vitals

Passed

Lĩnh vực

Ecommerce

Chỉ số tăng trưởng

Điểm Desktop

99 (+28)

Điểm Mobile

100 (+50)

Core Web Vitals

Passed

Lĩnh vực

SEO

Chỉ số tăng trưởng

Điểm Desktop

99 (+26)

Điểm Mobile

98 (+59)

Core Web Vitals

Passed

Lĩnh vực

Ecommerce

Chỉ số tăng trưởng

Điểm Desktop

100 (+8)

Điểm Mobile

98 (+35)

Core Web Vitals

Passed

Lĩnh vực

Giáo Dục

Chỉ số tăng trưởng

Điểm Desktop

100 (+61)

Điểm Mobile

100 (+61)

Core Web Vitals

Passed

Lĩnh vực

Giáo Dục

Võ Thiên Tòng

25 Tháng 2 lúc 21:09

·

Mình muốn gửi lời cảm ơn chân thành đến Team Vietnix, anh Hưng Nguyễn, anh Vietnix Trung, em Quốc Huy đã hỗ trợ tối ưu Page Speed Insight (PSI) cho website vanvoiminhhoa.vn của mình.
Biết đến anh Hưng đã lâu nhưng chưa có duyên sử dụng dịch vụ bên anh. Tình cờ thấy được bài Post của anh về việc hỗ trợ tối ưu PSI miễn phí chỉ với vài Slot, thấy AE cmt khá nhiều nên cũng không nghĩ tới lượt mình. Hôm sau đánh liều inbox 1 phen xem sao thì may mắn được đưa vào danh sách. Vài ngày sau được Team Vietnix liên hệ và hỗ trợ.
Kết quả đạt được:
• Điểm xanh lè xanh lét
• Tốc độ tải trang nhanh hơn hẳn
• Các chỉ số cũng được cải thiện đáng kể
• Và mình tin rằng với việc PSI được cải thiện cũng thúc đẩy những thứ khác đi lên theo!
Mình thực sự hài lòng với dịch vụ của Vietnix và muốn giới thiệu đến tất cả mọi người:
• Dịch vụ Wordpress Hosting: Tốc độ nhanh, ổn định, bảo mật cao, hỗ trợ kỹ thuật 24/7. (https://vietnix.vn/wordpress-hosting/)
• Dịch vụ Business Hosting: Dung lượng lớn, phù hợp cho website có lượng truy cập cao, tích hợp nhiều tính năng cao cấp. (https://vietnix.vn/business-hosting/)
Đặc biệt, Vietnix đang có chương trình ưu đãi:
• Giảm giá 20% trọn đời khi nhập code THIENTONG_PAGESPEED tại trang thanh toán (Chu kỳ 12 tháng trở lên)
• Tặng 1 lần tối ưu điểm Page Speed Insight cho 1 website
Cám ơn Vietnix một lần nữa!
#Vietnix #Vanvoiminhhoa #Pagespeedinsight
Trước khi tối ưu
Sau khi tối ưu
Thiện Nguyễn - CEO SEO Dạo

5 Tháng 3 lúc 16:21

·

CORE WEB VITAL YẾU TỐ XẾP HẠNG TÌM KIẾM SEO
Core Web Vitals là một tập hợp các chỉ số đo lường hiệu suất của trang web từ góc độ người dùng, được Google sử dụng để đánh giá trải nghiệm người dùng trên các trang web. Các chỉ số chính bao gồm:
– Largest contentful paint (LCP): Tốc độ render của page. Mục tiêu là dưới 2,5 giây.
– First input delay (FID): Tốc độ phản hồi của website với tương tác của người dùng. Mục tiêu là dưới 100ms.
– Cumulative Layout Shift (CLS): Độ ổn định của bố cục trang. Mục tiêu là dưới 0.1.
Tất cả các chỉ số này đo lường các khía cạnh quan trọng của trải nghiệm người dùng trên trang web. Google đã công bố rằng từ tháng 5 năm 2021, các Core Web Vitals sẽ được sử dụng làm một trong các yếu tố đánh giá trong việc xếp hạng trang web trên kết quả tìm kiếm. Do đó, hiểu và cải thiện các Core Web Vitals là rất quan trọng đối với SEO.
Tóm lại, Core Web Vitals không chỉ giúp cải thiện hiệu suất và xếp hạng trang web trên công cụ tìm kiếm, mà còn cải thiện trải nghiệm của người dùng khi họ truy cập và tương tác với trang website.
P/s: mình đang có gói hỗ trợ đặc biệt cho anh em tối ưu tốc độ bên VIETNIX:
– Giảm 20% lifetime dịch vụ Hosting Business và Hosting Wordpress chu kỳ 12 tháng trở lên.
– Tặng 1 lần tối ưu điểm Page Speed Insight cho 1 website.
Anh em có nhu cầu đăng ký qua bạn Vietnix Trung này nhé và nhập mã SEODAO_PAGESPEED để được ưu đãi nhé.😁
Trước khi tối ưu
Sau khi tối ưu SEO Dạo
Icharm review

5 Tháng 3 lúc 15:43

·

[Mình vừa được hỗ trợ tối ưu page speed website]
Trước khi được tối ưu, web của mình điểm rất thấp, đặc biệt là mobile chỉ có 39. Cơ duyên thế nào lúc lướt face lại va phải chương trình tối ưu pagespeed bên Vietnix.
Sau khi được Trần Hoàng Phúc và team Vietnix hỗ trợ nhiệt tình, điểm web vọt lên 98 99 (như hình bên dưới). Dùng thử web thì thấy quá là mượt, 10 điểm cho team Vietnix.
Nói thật thì mình thật sự ấn tượng về sự nhiệt huyết, tận tâm và rất chuyên nghiệp bên Vietnix.
Anh em có nhu cầu về hosting hay có vấn đề về website như:
1. Web load chậm
2. Khách rời web vì đợi tải nội dung, hình ảnh lâu
3. Hay tất tần tật mọi thứ về website
THÌ LIÊN HỆ NGAY VIETNIX NHÉ!
Và đừng quên dùng pass “ICHARM_PAGESPEED” để được giảm 20% trọn đời hosting business và wp hosting. Quả code này còn được tặng 1 lần tối ưu pagespeed nữa nhé, ưu đãi chắc cũng phải nhất nhì thị trường luôn.
Trước khi tối ưu
Sau khi tối ưu
Hoàng Nguyễn

29 Tháng 2 lúc 17:04

·

Xin chào mọi người! Vừa rồi mình có sử dụng dịch vụ tối ưu website, tăng tốc độ tải trang pagespeed của Vietnix kết quả trên cả tuyệt vời nên mình viết bài này để chia sẻ thông tin với các bạn.
Lý do mình chọn dịch vụ tối ưu tốc độ website của Vietnix:
✅ Đội ngũ chuyên gia giàu kinh nghiệm: Đã tối ưu thành công cho hàng nghìn website trong nhiều lĩnh vực khác nhau. Các bạn nhân viên rất thân thiện, nhiệt tình và chủ động trong quá trình làm việc để cập nhật tiến độ.
✅ Quy trình chuyên nghiệp:
– Kiểm tra và phân tích: Vietnix sử dụng các công cụ tiên tiến để kiểm tra và phân tích tốc độ website của bạn.
– Xác định nguyên nhân: Vietnix xác định nguyên nhân khiến website tải chậm và đưa ra giải pháp tối ưu phù hợp.
– Tối ưu hóa website: Vietnix áp dụng các kỹ thuật tối ưu tiên tiến nhất để tăng tốc độ tải trang.
– Báo cáo kết quả: Vietnix cung cấp báo cáo chi tiết về kết quả tối ưu hóa website.
Công nghệ tiên tiến: Vietnix sử dụng các công nghệ tối ưu mới nhất như LiteSpeed, LSCache, Memcached, Redis, v.v.
✅ Cam kết kết quả: Vietnix cam kết tăng tốc độ website của bạn lên tối thiểu 90%.
✅ Giá cả cạnh tranh: Vietnix cung cấp dịch vụ tối ưu tốc độ website với mức giá cạnh tranh nhất trên thị trường.
📣 Để đăng ký sử dụng dịch vụ tối ưu tốc độ website và các dịch vụ khác như hosting, vps, domain… các bạn có thể đăng ký tại https://portal.vietnix.vn/aff.php?aff=57 hoặc Inbox cho sếp Vietnix Trung nhé.
Các bạn có thể kiểm tra tốc độ trang của mình https://lasan.edu.vn hoặc một vài trang khác đã sử dụng dịch vụ của Vietnix như sau:
https://pagespeed.web.dev/…/https…/v8beqewyt2…
https://pagespeed.web.dev/…/https…/etiohjvtl4…
https://pagespeed.web.dev/…/https…/yczuqpw6d1…
https://pagespeed.web.dev/…/https…/xf9y65kuzk…
https://pagespeed.web.dev/…/https…/fdrsms15en…
https://pagespeed.web.dev/…/https…/s7p9cgzeri…
Trước khi tối ưu
Sau khi tối ưu
Dũng cá xinh

30 Tháng 1 lúc 19:09

·

[Đỉnh]
Em có dùng hosting, vps, cloud vps, cloud server, dedicated server của rất nhiều bên từ trong nước đến nước ngoài để hosting khoảng 2,000+ domain. Mỗi bên đều có ưu nhược khác nhau, nhưng có 1 số bên đặc biệt “bá đạo”, trong đó có: Vietnix!!!!

Lần đầu tiên em được cả CEO Hưng Nguyễn lẫn Master về dev Vietnix Trung của 1 đơn vị hàng đầu liên quan đến Hosting, Server support từ A – Z (từ Zalo, Tele, đến FB và cả Phone)

Em có khá nhiều web dạng Big Data (bài, ảnh, database, data) lên đến hàng trăm Gb. Càng to thì nó càng có nhiều vấn đề về phần phản hồi ban đầu (nhược điểm cố hữu của php wordpress so với nativejs, reactjs, html, headless,…), và anh em Vietnix có nhã ý hỗ trợ xử lý phần Speed Insight này.

Kết quả thực sự kinh ngạc, từ cách trao đổi đến xử lý vấn đề, cut off những cái cần cut off, xử lý rất sâu vấn đề và gợi ý rất nhiều ý tưởng optimize hệ thống!!!! Thực sự quá hài lòng về kết quả cũng như cách tương tác của các đầu tầu bên Vietnix ^^!!!

Nhân cơ duyên được kết nối với những cao thủ của Vietnix, em xin chia sẻ và lan tỏa để nhiều anh em có cơ hội được sử dụng những dịch vụ tốt nhất với giá vô cùng hợp lý!!!!

1 – Với anh em chưa có hosting, em đặc biệt recommend sử dụng hosting bên Vietnix:
– Sử dụng mã DUNGCAXINH_PAGESPEED sẽ được giảm 20% trọn đời (lifetime luôn)
– Áp dụng các gói Hosting Business, Hosting wordpress và reg 1 năm trở lên
– Anh em chưa biết cách reg thì còm men hoặc ib để em hướng dẫn hoặc nhờ các bạn bên Vietnix support từ A – Z

2 – Anh em có hosting rồi và muốn build blog hoặc web = wordpress mà chưa có giao diện thì nhân tiện em đang có tài khoản Premium bên Envato, em sẽ tặng bất kỳ giao diện nào có trên Envato Themes (Link em để dưới còm men) ạ. Cả nhà còm hoặc ib em Themes mà mọi người “chim ưng”, em sẽ cho anh em tải về, up drive và gửi ạ!!! (Chương trình này kéo dài đến ngày 29 tết âm lịch ạ)

3 – BEST NHẤT luôn!!!! Anh em nào mua hosting dùng mã DUNGCAXINH_PAGESPEED sẽ được tối ưu 100 điểm tốc độ cho 1 web (đây là ưu đãi riêng của CEO Hưng Nguyễn dành cho bạn bè của #dungcaxinh ^^) (Giá trị nhất là cái vụ số 3 này anh chị em nhé ^^), cơ hội vàng để move về đơn vị hosting uy tín là đây ^^!!!!

Một lần nữa xin chân thành cám ơn 2 đồng chí em: Hưng Nguyễn và Vietnix Trung đã giải được một bài toán khó cho các trang WP Big data mà anh loay hoay bao lâu nay chưa tìm ra đáp án!!! Chúc Vietnix ngày càng phát triển và có một năm 2024 đại đại thắng nhé ^^ !!!!!
#SEO #Vietnix #dungcaxinh

Trước khi tối ưu
Sau khi tối ưu
Hiếu AI

2 Tháng 2 lúc 21:06

·

UY TÍN – TẬN TÂM – TỐC ĐỘ

3 từ trên là vẫn chưa đủ để nói về quy trình làm việc cực chuyên nghiệp của team Vietnix.Chuyện là mình có con website chính đang có lượt truy cập organic hàng ngày cũng tương đối (hình 1)

Vấn đề là, con site này đang nằm trên hosting dùng chung nên tốc độ load chưa nhanh, tốc độ load chưa nhanh thì trải nghiệm visitor chưa tốt, trải nghiệm visitor chưa tốt thì tỷ lệ chuyển đổi ra đơn hàng kiểu gì thì kiểu cũng sẽ bị ảnh hưởng.

Biết rõ là đang mất tiền nhưng không biết xử lý như lào, nghĩ mà cay.

Đang loay hoay thì vận may nó tới, hôm qua đang lướt phở bò thấy a Nguyễn Việt Dũng đăng bài, rảnh nên thả cái comment hóng hớt, ai ngờ ngoằng phát thấy ông Dũng tạo nhóm với Vietnix Trung luôn.

Ae Vietnix thì siêu tốc độ, lập tức lấy thông tin vào việc, không hỏi han lằng nhằng, không kỳ kèo chốt đơn dù lúc đấy cũng đang đêm muộn.
Sáng hôm sau dậy vẫn còn đang lơ ngơ mở điện thoại check tin nhắn thì đã thấy ae Vietnix báo xong việc, trong khi mình vẫn chưa biết có chuyện gì xảy ra @@.

Được cái bấm thử website thì thấy load siêu nhanh, chưa tới một giây là thông tin các thứ hiện hết. Quá phê, thả con ảnh trước sau (hình 2,3) để ace tiện đối chiếu nhé. Thế này thì mình gửi gắm nốt 15 em website còn lại cho team Vietnix thôi chứ không cần nghĩ ngợi gì nữa. 10/10.

Nên là:

  1. Anh chị em muốn có một con website tốc độ load nhanh như tốc độ trở mặt của nyc – Dùng ngay dịch vụ hosting của Vietnix
  2. Anh chị em có website rồi muốn tìm bên hosting uy tín, chuyên nghiệp hỗ trợ không quản ngày đêm – Liên hệ ngay Vietnix Trung
  3. Anh chị em quan tâm đến trải nghiệm khách hàng, từ những cái nhỏ nhất như tăng tốc độ website – Better call Vietnix Trung

Và đừng quên dùng pass “HIEUAI_PAGESPEED” để được giảm 20% trọn đời hosting business và wp hosting, quả code này còn được tặng 1 lần tối ưu pagespeed nữa nhé, ưu đãi chắc cũng phải nhất nhì thị trường luôn.
#SEO #Vietnix #hieuai

Website
Trước khi tối ưu
Sau khi tối ưu

Chỉ số tăng trưởng

Điểm Desktop

100 (+43)

Điểm Mobile

100 (+74)

Core Web Vitals

Passed

Lĩnh vực

AI