TimescaleDB adalah database open-source yang diciptakan untuk membuat SQL scalable untuk data time-series. Ini adalah sistem database yang relatif baru. TimescaleDB telah diperkenalkan ke pasar dua tahun lalu dan mencapai versi 1.0 pada September 2018. Namun demikian, ia direkayasa di atas sistem RDBMS yang matang.
TimescaleDB dikemas sebagai ekstensi PostgreSQL. Semua kode dilisensikan di bawah lisensi sumber terbuka Apache-2, dengan pengecualian beberapa kode sumber yang terkait dengan fitur perusahaan deret waktu yang dilisensikan di bawah Lisensi Skala Waktu (TSL).
Sebagai basis data deret waktu, ia menyediakan partisi otomatis di seluruh tanggal dan nilai kunci. Dukungan SQL asli TimescaleDB menjadikannya pilihan yang baik bagi mereka yang berencana untuk menyimpan data deret waktu dan sudah memiliki pengetahuan bahasa SQL yang solid.
Jika Anda mencari database deret waktu yang dapat menggunakan SQL yang kaya, HA, solusi pencadangan yang solid, replikasi, dan fitur perusahaan lainnya, blog ini dapat menempatkan Anda di jalur yang benar.
Kapan menggunakan TimescaleDB
Sebelum kita mulai dengan fitur TimescaleDB, mari kita lihat di mana itu bisa muat. TimescaleDB dirancang untuk menawarkan yang terbaik dari relasional dan NoSQL, dengan fokus deret waktu. Tapi apa itu data deret waktu?
Data deret waktu adalah inti dari Internet of Things, sistem pemantauan, dan banyak solusi lain yang berfokus pada data yang sering berubah. Seperti namanya "deret waktu", kita berbicara tentang data yang berubah seiring waktu. Kemungkinan untuk jenis DBMS seperti itu tidak terbatas. Anda dapat menggunakannya dalam berbagai kasus penggunaan IoT industri di seluruh manufaktur, pertambangan, minyak &gas, ritel, perawatan kesehatan, pemantauan pengembangan atau sektor informasi keuangan. Ini juga dapat sangat sesuai dengan alur pembelajaran mesin atau sebagai sumber untuk operasi dan intelijen bisnis.
Tidak ada keraguan bahwa permintaan untuk IoT dan solusi serupa akan tumbuh. Dengan demikian, kita mungkin juga mengharapkan kebutuhan untuk menganalisis dan memproses data dengan berbagai cara. Data deret waktu biasanya hanya ditambahkan - sangat kecil kemungkinannya Anda akan memperbarui data lama. Anda biasanya tidak menghapus baris tertentu, di sisi lain, Anda mungkin ingin semacam agregasi data dari waktu ke waktu. Kami tidak hanya ingin menyimpan bagaimana data kami berubah seiring waktu, tetapi juga menganalisis dan belajar darinya.
Masalah dengan tipe baru sistem database adalah mereka biasanya menggunakan bahasa query mereka sendiri. Butuh waktu bagi pengguna untuk mempelajari bahasa baru. Perbedaan terbesar antara TimescaleDB dan database deret waktu populer lainnya adalah dukungan untuk SQL. TimescaleDB mendukung berbagai fungsionalitas SQL termasuk agregat berbasis waktu, gabungan, subkueri, fungsi jendela, dan indeks sekunder. Selain itu, jika aplikasi Anda sudah menggunakan PostgreSQL, kode klien tidak perlu diubah.
Dasar-dasar arsitektur
TimescaleDB diimplementasikan sebagai ekstensi pada PostgreSQL, yang berarti bahwa database skala waktu berjalan dalam instance PostgreSQL secara keseluruhan. Model ekstensi memungkinkan database untuk memanfaatkan banyak atribut PostgreSQL seperti keandalan, keamanan, dan konektivitas ke berbagai alat pihak ketiga. Pada saat yang sama, TimescaleDB memanfaatkan tingkat penyesuaian tinggi yang tersedia untuk ekstensi dengan menambahkan kait jauh ke dalam perencana kueri, model data, dan mesin eksekusi PostgreSQL.
Arsitektur TimescaleDBHypertable
Dari sudut pandang pengguna, data TimescaleDB terlihat seperti tabel tunggal, yang disebut hypertables. Hypertables adalah konsep atau tampilan implisit dari banyak tabel individu yang menyimpan data yang disebut chunks. Data tabel hiper dapat berupa satu atau dua dimensi. Itu dapat diagregasikan menurut interval waktu, dan dengan nilai "kunci partisi" (opsional).
Hampir semua interaksi pengguna dengan TimescaleDB adalah dengan hypertables. Membuat tabel, mengindeks, mengubah tabel, memilih data, menyisipkan data ... semuanya harus dilakukan di hypertable.
TimescaleDB melakukan partisi ekstensif ini baik pada penyebaran node tunggal maupun penyebaran berkerumun (dalam pengembangan). Sementara partisi secara tradisional hanya digunakan untuk penskalaan di beberapa mesin, ini juga memungkinkan kita untuk meningkatkan kecepatan tulis yang tinggi (dan meningkatkan kueri paralel) bahkan pada mesin tunggal.
Dukungan data relasional
Sebagai database relasional, ia memiliki dukungan penuh untuk SQL. TimescaleDB mendukung model data fleksibel yang dapat dioptimalkan untuk kasus penggunaan yang berbeda. Ini membuat Timescale agak berbeda dari kebanyakan database deret waktu lainnya. DBMS dioptimalkan untuk penyerapan cepat dan kueri kompleks, berdasarkan PostgreSQL dan bila diperlukan kami memiliki akses ke pemrosesan deret waktu yang kuat.
Pemasangan
TimescaleDB mirip dengan PostgreSQL mendukung berbagai cara penginstalan, termasuk penginstalan di Ubuntu, Debian, RHEL/Centos, Windows, atau platform cloud.
Salah satu cara paling nyaman untuk bermain dengan TimescaleDB adalah gambar buruh pelabuhan.
Perintah di bawah ini akan menarik image Docker dari Docker Hub jika belum diinstal dan kemudian menjalankannya.
docker run -d --name timescaledb -p 5432:5432 -e POSTGRES_PASSWORD=severalnines timescale/timescaledb
Penggunaan pertama
Karena instance kita sudah aktif dan berjalan, inilah saatnya untuk membuat database timescaledb pertama kita. Seperti yang Anda lihat di bawah, kami terhubung melalui konsol PostgreSQL standar jadi Jika Anda memiliki alat klien PostgreSQL (mis., psql) yang diinstal secara lokal, Anda dapat menggunakannya untuk mengakses instance buruh pelabuhan TimescaleDB.
psql -U postgres -h localhost
CREATE DATABASE severalnines;
\c severalnines
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
Operasi sehari-hari
Dari perspektif penggunaan dan pengelolaan, TimescaleDB hanya terlihat dan terasa seperti PostgreSQL, dan dapat dikelola dan dikueri seperti itu.
Poin-poin utama untuk operasi sehari-hari adalah:
- Berdampingan dengan database TimescaleDB dan PostgreSQL lainnya di server PostgreSQL.
- Menggunakan SQL sebagai bahasa antarmukanya.
- Menggunakan konektor PostgreSQL umum ke alat pihak ketiga untuk pencadangan, konsol, dll.
Setelan TimescaleDB
Pengaturan out-of-the-box PostgreSQL biasanya terlalu konservatif untuk server modern dan TimescaleDB. Anda harus memastikan pengaturan postgresql.conf Anda disetel, baik dengan menggunakan timescaledb-tune atau melakukannya secara manual.
$ timescaledb-tune
Skrip akan meminta Anda untuk mengonfirmasi perubahan. Perubahan ini kemudian ditulis ke postgresql.conf Anda dan akan berlaku saat restart.
Sekarang, mari kita lihat beberapa operasi dasar dari tutorial TimescaleDB yang dapat memberi Anda gambaran tentang cara bekerja dengan sistem database baru.
Untuk membuat hypertable, Anda mulai dengan tabel SQL biasa dan kemudian mengubahnya menjadi hypertable melalui fungsi create_hypertable.
-- Create extension timescaledb
CREATE EXTENSION timescaledb;
Create a regular table
CREATE TABLE conditions (
time TIMESTAMPTZ NOT NULL,
location TEXT NOT NULL,
temperature DOUBLE PRECISION NULL,
humidity DOUBLE PRECISION NULL
);
Mengubahnya menjadi hypertable sangat mudah seperti:
SELECT create_hypertable('conditions', 'time');
Memasukkan data ke dalam hypertable dilakukan melalui perintah SQL normal:
INSERT INTO conditions(time, location, temperature, humidity)
VALUES (NOW(), 'office', 70.0, 50.0);
Memilih data, adalah SQL lama yang bagus.
SELECT * FROM conditions ORDER BY time DESC LIMIT 10;
Seperti yang dapat kita lihat di bawah ini, kita dapat melakukan group by, order by, dan functions. Selain itu, TimescaleDB menyertakan fungsi untuk analisis deret waktu yang tidak ada di vanilla PostgreSQL.
SELECT time_bucket('15 minutes', time) AS fifteen_min,
location, COUNT(*),
MAX(temperature) AS max_temp,
MAX(humidity) AS max_hum
FROM conditions
WHERE time > NOW() - interval '3 hours'
GROUP BY fifteen_min, location
ORDER BY fifteen_min DESC, max_temp DESC;