Cách cài đặt và sử dụng TimescaleDB trên Ubuntu 18.04
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 ...
Quản lý dữ liệu chuỗi thời gian đã trở thành một kỹ năng thiết yếu với sự phát triển 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 Ubuntu 18.04, cấu hình nó và tìm hiểu cách làm việc với nó. Bạn sẽ 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 loại bỏ 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 :
- Một server Ubuntu 18.04 được cài đặt theo Hướng dẫn Cài đặt Server Ban đầu cho Ubuntu 18.04 của ta , bao gồm user không phải root có quyền sudo và firewall .
- PostgreSQL được cài đặt trên server của bạn. Làm theo Bước 1 của Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 18.04 để cài đặt nó.
Bước 1 - Cài đặt TimescaleDB
TimescaleDB không có sẵn trong repository mặc định của Ubuntu, vì vậy trong bước này, bạn sẽ cài đặt nó từ Repository cá nhân TimescaleDB (PPA).
Đầu tiên, thêm repository APT của Timescale:
- sudo add-apt-repository ppa:timescale/timescaledb-ppa
Xác nhận hành động này bằng cách nhấn ENTER
.
Tiếp theo, làm mới bộ nhớ cache APT của bạn để cập nhật danh sách gói của bạn:
- sudo apt update
Đến đây bạn có thể tiến hành cài đặt. Hướng dẫn này sử dụng PostgreSQL version 10; nếu bạn đang sử dụng một version PostgreSQL khác (ví dụ: 11 hoặc 9.6), hãy thay thế giá trị trong lệnh sau và chạy nó:
- sudo apt install timescaledb-postgresql-10
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
, công cụ này sẽ đọ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
Đầu tiên, bạn cần xác nhận đường dẫn đến file cấu hình PostgreSQL:
OutputUsing postgresql.conf at this path: /etc/postgresql/10/main/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.backup201911181111
Tiếp theo, bạn sẽ được yêu cầu thay đổi biến shared_preload_libraries
để tải trước module TimescaleDB khi khởi động server PostgreSQL:
Outputshared_preload_libraries needs to be updated Current: #shared_preload_libraries = '' Recommended: shared_preload_libraries = 'timescaledb' Is this okay? [(y)es/(n)o]:
shared_preload_libraries
chấp nhận một danh sách module được phân tách bằng dấu phẩy làm giá trị, chỉ định module nào PostgreSQL nên tải trước khi khởi động server database . Thực hiện thay đổi này sẽ thêm module timescaledb
vào danh sách đó.
Lưu ý: Nếu không tìm thấy thư viện được chỉ định bởi shared_preload_libraries
, thì server database sẽ không khởi động được. Hãy nhớ điều này khi gỡ lỗi các ứng dụng sử dụng shared_preload_libraries
. Để biết thêm thông tin về điều này, hãy xem bài viết PostgresqlCO.NF này trên shared_preload_libraries
.
Bật module TimescaleDB bằng lệnh y
tại dấu nhắc này và nhấn ENTER
:
Output... 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, tập lệnh sau đó sẽ đề 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:
OutputTune memory/parallelism/WAL and other settings? [(y)es/(n)o]: y Recommendations based on 7.79 GB of available memory and 4 CPUs for PostgreSQL 10 Memory settings recommendations Current: shared_buffers = 128MB #effective_cache_size = 4GB #maintenance_work_mem = 64MB #work_mem = 4MB Recommended: shared_buffers = 1994MB effective_cache_size = 5982MB maintenance_work_mem = 1021001kB work_mem = 5105kB 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 một số cài đặt. shared_buffers
, chẳng hạn, xác định lượng bộ nhớ được cấp phát cho dữ liệu bộ nhớ đệm. Theo mặc định, cài đặt này tương đối thấp để tính đến nhiều nền tảng hơn, do đó, timescaledb-tune
đã đề xuất tăng giá trị từ 128MB
lên 1994MB
, tận dụng tài nguyên tốt hơn bằng cách tạo thêm không gian để lưu trữ thông tin được lưu trong bộ nhớ cache như các truy vấn lặp lại. Biến work_mem
cũng đã được tăng lên để cho phép các loại phức tạp hơn.
Nếu bạn muốn tìm hiểu thêm về quá trình điều chỉnh cài đặt bộ nhớ cho PostgreSQL, hãy xem bài viết Điều chỉnh Server PostgreSQL của bạn trên PostgreSQL wiki .
Nhập y
để chấp nhận các giá trị:
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. Các cài đặt này xác định cách nhiều CPU có thể thực hiện các truy vấn đồng thời song song để quét database và trả về dữ liệu được yêu cầu nhanh hơn.
Những người có nhiều CPU sẽ gặp phải các đề xuất như sau:
OutputParallelism 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 = 13 max_parallel_workers_per_gather = 1 max_parallel_workers = 2 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à tác vụ 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 TimescaleDB và PostgreSQL .
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) :
OutputWAL 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 là một phương pháp ghi log trong đó PostgreSQL ghi lại các thay đổi đối với các file dữ liệu trước khi các thay đổi được thực hiện đối với database . Bằng cách ưu tiên một bản ghi cập nhật các thay đổi dữ liệu, WAL đảm bảo bạn có thể xây dựng lại database của bạn trong trường hợp xảy ra sự cố. Bằng cách này, nó bảo toàn tính toàn vẹn của dữ liệu. Tuy nhiên, cài đặt mặc định có thể gây ra các hoạt động nhập / xuất (I / O) không hiệu quả làm chậm hiệu suất ghi. Để khắc phục điều này, hãy nhập và nhập 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:
OutputMiscellaneous 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: /etc/postgresql/10/main/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 /etc/postgresql/ 10 /main/postgresql.conf
.
Lưu ý: Nếu bạn đang tự động hoá quá trình cài đặt, bạn cũng có thể chạy lệnh ban đầu với --quiet
và --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 --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.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.
Để chứng minh điều này, bạn sẽ sử dụng các lệnh PostgreSQL để tạo database , sau đó kích hoạt phần mở rộng TimescaleDB để tạo siêu bảng , đây là phần trừu tượng cấp cao hơn của nhiều bảng riêng lẻ. Hypertables là cấu trúc chính mà bạn sẽ làm việc trong TimescaleDB.
Đă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:
OutputWARNING: 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
Như đã đề cập trước đó, các điểm tương tác chính với dữ liệu chuỗi thời gian của bạn là siêu bảng, bao gồm 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 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 chuỗi 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. Bạn có thể chèn dữ liệu vào siêu bảng bằng INSERT
SQL chuẩn. Chèn một số dữ liệu temperature
và humidity
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ẽ thấy kết quả sau:
OutputINSERT 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:
OutputINSERT 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, sử dụng lệnh VACUUM
để 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. Đây là tập dữ liệu TimescaleDB chính thức, được tạo để 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ó:
- wget https://timescaledata.blob.core.windows.net/datasets/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:
OutputCOPY 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 tiêu chuẩn, TimescaleDB còn cung cấp một số hàm đặc biệt hữu ích cho việc phân tích dữ liệu chuỗi 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:
OutputNOTICE: 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 :
... 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 Ubuntu 18.04 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
Đến đây bạn đã biết cách lưu trữ dữ liệu chuỗi thời gian, bạn có thể sử dụng dữ liệu để tạo biểu đồ. TimescaleDB tương thích với các công cụ trực quan hóa hoạt động với PostgreSQL, như Grafana . Bạn có thể sử dụng hướng dẫn Cách cài đặt và bảo mật Grafana trên Ubuntu 18.04 của ta để tìm hiểu thêm về công cụ trực quan hóa phổ biến này.
Các tin liên quan
Cách lấy chứng chỉ Let's Encrypt bằng Ansible trên Ubuntu 18.042019-11-14
Cách cài đặt MongoDB trên Ubuntu 16.04
2019-10-13
Cách thêm và xóa người dùng trên Ubuntu 18.04
2019-09-12
Cách cài đặt và bảo mật Grafana trên Ubuntu 18.04
2019-09-05
Cách nhúng một ứng dụng React vào WordPress trên Ubuntu 18.04
2019-08-27
Cách cài đặt và cấu hình Laravel với LEMP trên Ubuntu 18.04
2019-08-01
Cách triển khai và quản lý DNS của bạn bằng OctoDNS trên Ubuntu 18.04
2019-07-23
Cách thiết lập hệ thống bàn trợ giúp với OTRS trên Ubuntu 18.04
2019-06-28
Cách triển khai và quản lý DNS của bạn bằng DNSControl trên Ubuntu 18.04
2019-06-26
Cách cấu hình Cụm Galera với MariaDB trên server Ubuntu 18.04
2019-06-20