DuckDB Analytics Home Lab Setup —

DuckDB คืออะไรและทำไมเหมาะกับ Home Lab

DuckDB เป็น in-process analytical database engine ที่ออกแบบมาสำหรับ OLAP (Online Analytical Processing) workloads ทำงานแบบ embedded ไม่ต้องติดตั้ง server แยก เหมือน SQLite แต่ optimize สำหรับ analytics แทน transactions
ข้อดีของ DuckDB สำหรับ Home Lab คือ zero configuration ไม่ต้อง setup server, ใช้ RAM น้อย (เริ่มต้นแค่ไม่กี่ MB), อ่าน Parquet, CSV, JSON ได้โดยตรงไม่ต้อง import, query เร็วมากด้วย vectorized execution engine, รองรับ SQL standard ครบถ้วน และ integrate กับ Python, R, Node.js ได้ง่าย
Use cases สำหรับ Home Lab ได้แก่ วิเคราะห์ log files จาก servers, network traffic analysis, IoT sensor data analytics, personal finance tracking, media library metadata analysis และ system performance monitoring
DuckDB เร็วกว่า pandas สำหรับ analytical queries 10-100 เท่า โดยเฉพาะ GROUP BY, JOIN, window functions บน datasets ขนาดใหญ่ เพราะใช้ columnar storage, vectorized processing และ parallel execution
เนื้อหาเกี่ยวข้อง — บทความที่เกี่ยวข้อง: Mintlify Docs Metric Collection
ติดตั้ง DuckDB และเริ่มต้นใช้งาน
วิธีติดตั้งและใช้งาน DuckDB
# === ติดตั้ง DuckDB ===
# Python
pip install duckdb
# Node.js
npm install duckdb
# CLI (standalone)
# Linux
wget https://github.com/duckdb/duckdb/releases/latest/download/duckdb_cli-linux-amd64.zip
unzip duckdb_cli-linux-amd64.zip
sudo mv duckdb /usr/local/bin/
# macOS
brew install duckdb
# === เริ่มต้นใช้งาน CLI ===
duckdb homelab.db
# สร้างตาราง
CREATE TABLE server_logs (
timestamp TIMESTAMP,
server_name VARCHAR,
cpu_percent DOUBLE,
memory_percent DOUBLE,
disk_io_read BIGINT,
disk_io_write BIGINT,
network_rx BIGINT,
network_tx BIGINT,
request_count INTEGER,
error_count INTEGER
);
# Import CSV
COPY server_logs FROM 'logs/server_metrics_*.csv' (HEADER, DELIMITER ',');
# หรืออ่าน CSV โดยตรง (ไม่ต้อง import)
SELECT * FROM read_csv_auto('logs/server_metrics_2024*.csv') LIMIT 10;
# อ่าน Parquet
SELECT * FROM read_parquet('data/events/*.parquet') LIMIT 10;
# อ่าน JSON
SELECT * FROM read_json_auto('logs/app_logs.json') LIMIT 10;
# === Basic Analytics Queries ===
# Server CPU usage per hour
SELECT
date_trunc('hour', timestamp) AS hour,
server_name,
AVG(cpu_percent) AS avg_cpu,
MAX(cpu_percent) AS max_cpu,
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY cpu_percent) AS p95_cpu
FROM server_logs
WHERE timestamp >= CURRENT_DATE - INTERVAL '7 days'
GROUP BY 1, 2
ORDER BY 1, 2;
# Top memory consumers
SELECT
server_name,
AVG(memory_percent) AS avg_memory,
MAX(memory_percent) AS max_memory,
COUNT(*) AS sample_count
FROM server_logs
GROUP BY server_name
ORDER BY avg_memory DESC
LIMIT 10;
# Anomaly detection (values > 2 standard deviations)
WITH stats AS (
SELECT
server_name,
AVG(cpu_percent) AS mean_cpu,
STDDEV(cpu_percent) AS std_cpu
FROM server_logs
GROUP BY server_name
)
SELECT l.timestamp, l.server_name, l.cpu_percent,
s.mean_cpu, s.std_cpu
FROM server_logs l
JOIN stats s ON l.server_name = s.server_name
WHERE l.cpu_percent > s.mean_cpu + 2 * s.std_cpu
ORDER BY l.timestamp DESC
LIMIT 20;
# Export results
COPY (
SELECT date_trunc('day', timestamp) AS day,
COUNT(*) AS total_requests,
SUM(error_count) AS total_errors
FROM server_logs
GROUP BY 1
ORDER BY 1
) TO 'reports/daily_summary.parquet' (FORMAT PARQUET);
.quit
สร้าง Analytics Pipeline ด้วย DuckDB
Pipeline สำหรับ automated analytics
แนะนำเพิ่มเติม — ระบบเทรดของ iCafeForex
DuckDB กับ Python Data Stack
ใช้ DuckDB ร่วมกับ pandas, Polars และ Arrow
Home Lab Analytics Dashboard

สร้าง dashboard สำหรับ home lab monitoring
เนื้อหาเกี่ยวข้อง — ทำความเข้าใจ จอมอนิเตอร์โค้ง — ทุกสิ่งที่ต้องรู้ในปี 2026
Performance Tuning และ Advanced Features
เทคนิค optimize DuckDB performance
FAQ คำถามที่พบบ่อย
Q: DuckDB กับ SQLite ต่างกันอย่างไร?
แนะนำเพิ่มเติม — ติดตาม XM Signal
A: SQLite เป็น row-oriented database ออกแบบสำหรับ OLTP (transactions, point queries) DuckDB เป็น column-oriented database ออกแบบสำหรับ OLAP (analytics, aggregations) สำหรับ query ที่ scan ข้อมูลจำนวนมาก (GROUP BY, SUM, AVG) DuckDB เร็วกว่า 10-100 เท่า สำหรับ INSERT ทีละ row SQLite เร็วกว่า ใช้ทั้งสองตาม use case SQLite สำหรับ app data DuckDB สำหรับ analytics
เนื้อหาเกี่ยวข้อง — Data Lakehouse Stream Processing
Q: DuckDB รองรับ data ขนาดเท่าไหร?
A: DuckDB รองรับ data ที่ใหญ่กว่า RAM ได้ด้วย out-of-core processing (spill to disk) ทดสอบจริงรัน queries บน datasets 100GB+ ด้วย RAM 16GB ได้ สำหรับ Home Lab ที่ data ไม่เกิน 10-50GB DuckDB ทำงานได้สบาย ถ้า data เกิน 100GB+ อาจพิจารณา ClickHouse หรือ Apache Spark แทน
Q: DuckDB เหมาะกับ production ไหม?
A: DuckDB เหมาะสำหรับ single-user analytical workloads ไม่เหมาะสำหรับ multi-user concurrent access หรือ high-throughput write workloads เหมาะสำหรับ embedded analytics, data science notebooks, ETL pipelines, reporting และ Home Lab analytics สำหรับ production multi-user analytics ใช้ ClickHouse, Snowflake หรือ BigQuery
เนื้อหาเกี่ยวข้อง — ทำความเข้าใจ ZFS on Linux Site Reliability SRE
Q: จะ backup DuckDB database อย่างไร?
A: DuckDB database เป็นไฟล์เดียว (.db) สามารถ copy ไฟล์ได้เลย (เมื่อ database ปิดอยู่) หรือ export เป็น Parquet files ด้วย EXPORT DATABASE 'backup_dir' (FORMAT PARQUET) สำหรับ Home Lab แนะนำ cron job ที่ export เป็น Parquet ทุกวัน เพราะ Parquet files เป็น standard format อ่านได้จากทุก tool





