Vấn đề: Khi SQL truyền thống “hụt hơi” trước dữ liệu cảm biến
Ngày đầu làm dự án smart home, mình từng dại dột ném toàn bộ data sensor nhiệt độ và độ ẩm gửi về mỗi 5 giây vào MySQL. Chỉ sau 3 tháng, bảng dữ liệu cán mốc 50 triệu dòng, khiến mỗi lệnh SELECT vẽ biểu đồ mất hơn 20 giây để phản hồi. Máy chủ liên tục báo quá tải disk I/O.
Vấn đề nằm ở chỗ: SQL Database được thiết kế cho các mối quan hệ phức tạp. Nó không sinh ra để “nuốt” hàng triệu bản ghi theo mốc thời gian mỗi giây. Đó là lý do mình chuyển sang InfluxDB. Công cụ này có khả năng nén dữ liệu cực tốt, giúp tiết kiệm tới 90% dung lượng ổ cứng so với SQL thông thường.
Cài đặt InfluxDB 2.x trên Ubuntu/Debian cực nhanh
Để hệ thống chạy ổn định, mình khuyên anh em dùng bản 2.x. Đây là phiên bản đã tích hợp sẵn Dashboard và bộ máy query Flux rất linh hoạt.
1. Thêm Repository chính thức
Đầu tiên, hãy nạp key GPG để đảm bảo gói cài đặt không bị can thiệp:
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo "393e8772240a2ed510e964359196b001944813580536c4b268593649646487e4 influxdata-archive_compat.key" | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main" | sudo tee /etc/apt/sources.list.d/influxdata.list
2. Cài đặt và kích hoạt Service
Chạy lệnh update và cài đặt gói influxdb2:
sudo apt-get update && sudo apt-get install influxdb2 -y
sudo systemctl start influxdb
sudo systemctl enable influxdb
3. Thiết lập tài khoản quản trị
Khác với bản 1.x, bản 2.x yêu cầu khởi tạo thông qua CLI hoặc giao diện Web. Hãy chạy lệnh dưới đây:
influx setup
Bạn cần nhập tên User, Organization (ví dụ: LabHome) và Bucket đầu tiên. Đừng quên lưu lại Operator Token. Nếu mất token này, bạn sẽ không thể kết nối ứng dụng vào database sau này.
Tư duy đúng về cấu trúc dữ liệu Time-series
Đừng bê nguyên tư duy Table/Row của SQL sang đây. Trong InfluxDB, hiệu năng phụ thuộc vào cách bạn đặt tên Tag và Field:
- Measurement: Coi như tên bảng (ví dụ:
air_quality). - Tag: Các nhãn dùng để lọc dữ liệu (ví dụ:
sensor_id="SN-001"). Tag được đánh index nên truy vấn rất nhanh. - Field: Giá trị thực tế (ví dụ:
pm25=15.2). Field KHÔNG được đánh index. - Timestamp: Trục thời gian, mặc định là khóa chính.
Lưu ý quan trọng: Tránh đưa các giá trị có độ biến thiên quá cao vào Tag (như ID người dùng ngẫu nhiên). Lỗi “High Cardinality” này sẽ khiến InfluxDB ngốn sạch RAM và làm server sập chỉ trong vài phút.
Quản lý Retention Policy: Đừng để ổ cứng “nổ tung”
Dữ liệu IoT tích tụ rất nhanh. Nếu lưu trữ mãi mãi, bạn sẽ sớm cạn kiệt tài nguyên. InfluxDB cho phép thiết lập tự động xóa dữ liệu cũ thông qua Bucket Retention.
Giả sử bạn chỉ muốn giữ log hệ thống trong vòng 30 ngày:
influx bucket update --name system_logs --retention 720h
Sau khi thiết lập, InfluxDB tự động dọn dẹp âm thầm. Bạn không cần tốn công viết script cronjob để xóa tay như các database truyền thống.
Kết nối thực tế: Ghi dữ liệu bằng Python
Dưới đây là cách đẩy dữ liệu từ một con Raspberry Pi lên InfluxDB bằng thư viện chính thức:
import influxdb_client
from influxdb_client.client.write_api import SYNCHRONOUS
client = influxdb_client.InfluxDBClient(
url="http://localhost:8086",
token="YOUR_TOKEN",
org="LabHome"
)
write_api = client.write_api(write_options=SYNCHRONOUS)
# Ghi dữ liệu theo chuẩn Line Protocol
point = influxdb_client.Point("environment") \
.tag("room", "bedroom") \
.field("humidity", 65.0)
write_api.write(bucket="SensorData", record=point)
Kinh nghiệm thực chiến cho anh em
Dùng đúng mục đích: Chỉ dùng InfluxDB cho metrics và logs. Những thông tin cần quan hệ chặt chẽ như user profile hay đơn hàng vẫn nên nằm ở PostgreSQL.
Tận dụng Telegraf: Thay vì tự viết code thu thập thông số server, hãy dùng Telegraf. Đây là một agent cực nhẹ, hỗ trợ hơn 200 plugin để đẩy data về InfluxDB chỉ với vài dòng cấu hình.
Giám sát dung lượng: InfluxDB nén dữ liệu rất tốt (tỷ lệ thường đạt 10:1). Tuy nhiên, hãy luôn đặt cảnh báo khi ổ cứng đạt 80% để tránh tình trạng database bị khóa ghi (read-only mode).
Làm chủ InfluxDB là bước đi khôn ngoan nếu bạn muốn xử lý Big Data trong mảng IoT hoặc Monitoring một cách chuyên nghiệp và tiết kiệm tài nguyên nhất.

