Thứ tư, 04/12/2019 | 00:00 GMT+7

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 :

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:

Output
Using 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:

Output
shared_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:

Output
Tune 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:

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 = 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 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 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:

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: /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--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:

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

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 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ẽ thấy 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, 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:

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 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:

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 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.


Tags:

Các tin liên quan

Cách lấy chứng chỉ Let's Encrypt bằng Ansible trên Ubuntu 18.04
2019-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