Proyek ini adalah contoh implementasi untuk menyimpan dan menganalisis data sensor dari perangkat IoT (Internet of Things) menggunakan Go sebagai backend dan ClickHouse sebagai database analitik berperforma tinggi.
Sebelum memulai, pastikan Anda telah menginstal perangkat lunak berikut di sistem Anda:
- Docker & Docker Compose: Untuk menjalankan database ClickHouse dalam container.
- Go: (Versi 1.20 atau lebih baru direkomendasikan).
- k6: Sebuah tool modern untuk load testing.
- Git: Untuk mengkloning repositori ini.
- VS Code Extension: REST Client untuk menggunakan file
playground.http
.
Ikuti langkah-langkah di bawah ini untuk menjalankan proyek secara lokal.
Pertama, jalankan server ClickHouse menggunakan Docker Compose. Perintah ini akan membuat dan menjalankan container di latar belakang (-d
).
docker compose up -d
Selanjutnya, Anda perlu membuat database dan tabel yang dibutuhkan.
a. Masuk ke dalam container ClickHouse menggunakan clickhouse-client
:
docker exec -it clickhouse-server clickhouse-client
b. Salin dan jalankan perintah SQL berikut di dalam clickhouse-client
untuk membuat database iot_analytics
dan tabel sensor_readings
:
CREATE DATABASE IF NOT EXISTS iot_analytics;
CREATE TABLE IF NOT EXISTS iot_analytics.sensor_readings
(
-- Kolom Data Utama --
device_id LowCardinality(String),
timestamp DateTime64(3, 'UTC'),
temperature Float64,
humidity Float64,
-- Kolom ALIAS untuk optimasi query --
event_date Date ALIAS toDate(timestamp)
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(timestamp)
ORDER BY (device_id, timestamp);
💡 Info: Setelah selesai, Anda bisa keluar dari
clickhouse-client
dengan mengetikexit
atau\q
lalu tekan Enter.
Setelah database dan tabel siap, jalankan aplikasi Go utama. Aplikasi ini akan menyediakan API yang siap digunakan.
go run .
Setelah aplikasi berjalan, Anda bisa melakukan dua jenis pengujian.
Gunakan k6
untuk mensimulasikan pengiriman data sensor dalam jumlah besar ke API Anda. Skrip generate.js
sudah disiapkan untuk tugas ini.
Jalankan perintah berikut di terminal terpisah:
k6 run generate.js
Perintah ini akan menjalankan skrip load test, dan Anda akan melihat data baru mulai masuk ke tabel ClickHouse Anda.
Untuk menguji endpoint API secara manual (misalnya, GET, POST), buka file playground.http
. Jika Anda sudah menginstal ekstensi REST Client di VS Code, Anda akan melihat tombol "Send Request" di atas setiap permintaan HTTP.
Klik tombol tersebut untuk mengirim permintaan langsung dari editor Anda dan melihat responsnya.
Berikut adalah beberapa sumber daya yang berguna untuk memahami arsitektur dan penggunaan ClickHouse lebih dalam: