Basis data deret waktu, seperti namanya, dirancang untuk menyimpan data yang berubah seiring waktu. Ini bisa berupa data apa pun yang dikumpulkan dari waktu ke waktu. Ini mungkin metrik yang dikumpulkan dari beberapa sistem, dan sebenarnya, semua sistem yang sedang tren adalah contoh data deret waktu.
Kami memiliki berbagai jenis database deret waktu, mana yang harus kami gunakan?
Di blog ini, kita akan melihat apa perbedaan utama antara dua opsi utama, TimescaleDB dan InfluxDB.
InfluxDB
InfluxDB telah dibuat oleh InfluxData. Ini adalah database deret waktu NoSQL kustom, open-source, yang ditulis dalam Go. Datastore menyediakan bahasa seperti SQL untuk mengkueri data, yang disebut InfluxQL, yang memudahkan pengembang untuk mengintegrasikan ke dalam aplikasi mereka. Ia juga memiliki bahasa kueri kustom baru yang disebut Flux, bahasa ini mungkin membuat beberapa tugas lebih mudah, tetapi selalu ada kurva pembelajaran saat mengadopsi bahasa kueri kustom.
Ini adalah contoh kueri Flux:
from(db:"testing")
|> range(start:-1h)
|> filter(fn: (r) => r._measurement == "cpu")
|> exponentialMovingAverage()
Dalam database ini, setiap pengukuran memiliki stempel waktu, dan kumpulan tag dan kumpulan bidang terkait. Bidang mewakili nilai pembacaan pengukuran yang sebenarnya, sedangkan tag mewakili metadata untuk menggambarkan pengukuran. Tipe data bidang terbatas pada float, int, string, dan boolean, dan tidak dapat diubah tanpa menulis ulang data. Nilai tag diindeks. Mereka direpresentasikan sebagai string, dan tidak dapat diperbarui.
InfluxDB cukup mudah untuk memulai, karena Anda tidak perlu khawatir membuat skema atau indeks. Namun, ini cukup kaku dan terbatas, tanpa kemampuan untuk membuat indeks tambahan, indeks pada bidang berkelanjutan, memperbarui metadata setelah fakta, menegakkan validasi data, dll.
Ini bukan tanpa skema. Ada skema dasar yang dibuat otomatis dari data masukan.
InfluxDB harus mengimplementasikan dari awal beberapa alat untuk toleransi kesalahan, seperti replikasi, ketersediaan tinggi, dan pencadangan/pemulihan, dan bertanggung jawab atas keandalan di disk. Kami terbatas dalam menggunakan alat ini dan banyak dari fitur ini, seperti HA, hanya tersedia dalam versi perusahaan.
Alat pencadangan InfluxDB dapat melakukan pencadangan penuh atau tambahan, dan dapat digunakan untuk pemulihan titik waktu.
InfluxDB juga menawarkan kompresi pada disk yang jauh lebih baik daripada PostgreSQL dan TimescaleDB.
TimescaleDB
TimescaleDB adalah database deret waktu sumber terbuka yang dioptimalkan untuk penyerapan cepat dan kueri kompleks yang mendukung SQL penuh. Ini didasarkan pada PostgreSQL dan menawarkan yang terbaik dari dunia NoSQL dan Relasional untuk data deret Waktu.
Ini adalah contoh kueri TimescaleDB:
SELECT time,
exponential_moving_average(value, 0.5) OVER (ORDER BY time)
FROM testing
WHERE measurement = cpu and time > now() - '1 hour';
TimescaleDB, sebagai ekstensi PostgreSQL, adalah database relasional. Hal ini memungkinkan untuk memiliki kurva pembelajaran singkat untuk pengguna baru, dan untuk mewarisi alat seperti pg_dump atau pg_backup untuk mencadangkan, dan alat ketersediaan tinggi, yang merupakan keuntungan di depan database deret waktu lainnya. Ini juga mendukung replikasi streaming sebagai metode utama replikasi, yang dapat digunakan dalam pengaturan ketersediaan tinggi. Dalam hal failover dan pencadangan, Anda dapat mengotomatiskan proses ini dengan menggunakan sistem eksternal seperti ClusterControl.
Dalam TimescaleDB, setiap pengukuran deret waktu dicatat dalam barisnya sendiri, dengan bidang waktu diikuti oleh sejumlah bidang lainnya, yang dapat berupa float, int, string, boolean, array, gumpalan JSON, dimensi geospasial, tanggal/waktu/ stempel waktu, mata uang, data biner, dan lainnya.
Anda dapat membuat indeks pada bidang apa pun (indeks standar) atau beberapa bidang (indeks gabungan), atau pada ekspresi seperti fungsi, atau bahkan membatasi indeks ke subset baris (indeks parsial). Setiap bidang ini dapat digunakan sebagai kunci asing ke tabel sekunder, yang kemudian dapat menyimpan metadata tambahan.
Dengan cara ini, Anda perlu memilih skema, dan memutuskan indeks mana yang Anda perlukan untuk sistem Anda.
Kinerja
Jika kita berbicara tentang kinerja, kita dapat memeriksa blog perbandingan TimescaleDB yang hebat. Di sana Anda memiliki perbandingan terperinci untuk kinerja antara kedua database dengan bagan dan metrik. Mari kita lihat beberapa informasi terpenting dari blog ini.
Sisipkan
- Untuk beban kerja dengan kardinalitas yang sangat rendah (misalnya, 100 perangkat), InfluxDB mengungguli TimescaleDB.
- Seiring peningkatan kardinalitas, kinerja sisipan InfluxDB turun lebih cepat daripada di TimescaleDB.
- Untuk beban kerja dengan kardinalitas sedang hingga tinggi (misalnya, 100 perangkat mengirim 10 metrik), TimescaleDB mengungguli InfluxDB.
Latensi baca
- Untuk kueri sederhana, hasilnya sedikit berbeda:ada beberapa di mana satu database jelas lebih baik daripada yang lain, sementara yang lain bergantung pada kardinalitas kumpulan data Anda. Perbedaan di sini sering kali dalam kisaran milidetik satu digit hingga dua digit.
- Untuk kueri yang kompleks, TimescaleDB jauh mengungguli InfluxDB, dan mendukung jenis kueri yang lebih luas. Perbedaannya di sini sering dalam kisaran detik hingga puluhan detik.
- Dengan mengingat hal itu, cara terbaik untuk menguji dengan benar adalah dengan membuat tolok ukur menggunakan kueri yang Anda rencanakan untuk dijalankan.
Masalah stabilitas
- InfluxDB memiliki masalah stabilitas dan kinerja pada kardinalitas tinggi (100 ribu+).
Kesimpulan
Jika data Anda cocok dengan model data InfluxDB, dan Anda tidak mengharapkan perubahan di masa mendatang, maka Anda harus mempertimbangkan untuk menggunakan InfluxDB karena model ini lebih mudah untuk memulai, dan seperti kebanyakan database yang menggunakan pendekatan berorientasi kolom, menawarkan kompresi pada disk yang lebih baik daripada PostgreSQL dan TimescaleDB.
Namun, model relasional lebih fleksibel dan menawarkan lebih banyak fungsionalitas, fleksibilitas, dan kontrol daripada model InfluxDB. Ini sangat penting saat aplikasi Anda berkembang. Dan ketika merencanakan sistem Anda, Anda harus mempertimbangkan kebutuhan saat ini dan masa depan.
Di blog ini, kita bisa melihat perbandingan singkat antara TimescaleDB dan InfluxDB, dan kita bisa mengatakan TimescaleDB sebagai ekstensi PostgreSQL, terlihat cukup matang dan kaya fitur karena mewarisi banyak dari PostgreSQL. Tetapi Anda dapat mengambil keputusan sendiri berdasarkan pro dan kontra yang disebutkan sebelumnya di blog ini, dan pastikan Anda membandingkan beban kerja Anda sendiri. Semoga berhasil di dunia basis data deret waktu baru ini!