6 poin oleh GN⁺ 2024-05-21 | 1 komentar | Bagikan ke WhatsApp

Apa itu data deret waktu?

  • Data deret waktu adalah kumpulan data yang setiap titik datanya memiliki stempel waktu
  • Contoh: harga saham, data suhu dan ketersediaan yang dikembalikan oleh perangkat dan sensor, data trafik situs web
  • Pekerjaan deret waktu umumnya mencakup kueri pemfilteran waktu dan kueri agregasi untuk peringkasan data

Pekerjaan deret waktu dengan PostgreSQL

  • PostgreSQL dapat menangani semua pekerjaan data berkat skalabilitas dan alat ekosistemnya
  • Tembo menetapkan tujuan agar pengguna dapat dengan mudah memanfaatkan ekosistem PostgreSQL
  • Permintaan terbesar dari pelanggan adalah stack yang dapat menyimpan dan memproses data deret waktu

Komponen pg_timeseries

  • Kebutuhan untuk menyimpan dan mengueri data deret waktu secara efisien:
    • Mengelola data deret waktu dengan mudah
    • Menangani throughput tinggi
    • Merespons kueri rentang dengan cepat
    • Menyimpan data dalam jumlah besar secara efisien
    • Menjalankan fungsi analitik yang kompleks
  • Fitur dasar PostgreSQL:
    • Partisi native, beragam indeks, materialized view, fungsi window/analitik
  • Ekstensi tambahan:
    • pg_partman: manajemen partisi
    • pg_cron: penjadwalan pekerjaan
    • columnar: kompresi
    • pg_ivm: materialized view inkremental
    • pg_tier: offload jangka panjang untuk partisi lama

pg_timeseries: cara paling sederhana untuk mengelola data deret waktu di PostgreSQL

  • pg_timeseries menggabungkan kemampuan dari beberapa ekstensi untuk menyediakan antarmuka terpadu
  • Untuk memulai, diperlukan tabel yang dipartisi berdasarkan kolom terkait waktu
    CREATE TABLE measurements (  
      metric_name text,  
      metric_value numeric,  
      metric_time timestamptz NOT NULL  
    ) PARTITION BY RANGE (metric_time);  
    
    SELECT enable_ts_table('measurements');  
    
  • Menyertakan berbagai view untuk menyediakan informasi penting:
    SELECT table_id, table_size_bytes FROM ts_table_info;  
    SELECT * FROM ts_part_info;  
    
  • Dapat mengatur kebijakan kompresi dan penghapusan untuk partisi:
    SELECT set_ts_compression_policy('measurements', '90 days');  
    SELECT set_ts_retention_policy('measurements', '365 days');  
    
  • Menyediakan fungsi tambahan:
    SELECT  
      locf(avg(metric_value)) OVER (ORDER BY metric_time) avg_val,  
      last(metric_name, metric_value) highest,  
      metric_time  
    FROM date_bin_table(NULL::measurements, '1 hour', '[2024-05-09,2024-06-07]');  
    

Kami baru di tahap awal

  • Dibutuhkan banyak komponen untuk membangun ekstensi deret waktu untuk PostgreSQL
  • Ada rencana untuk membangunnya secara terbuka bersama komunitas
  • Roadmap saat ini:
    • Offload partisi lama ke cold storage seperti S3
    • Fungsi aproksimasi untuk analisis yang efisien
    • Materialized view inkremental
    • Rollup dan rolloff untuk partisi lama
    • Fungsi helper analitik tambahan
  • Roadmap lengkap tersedia di README GitHub, dan prioritas fitur akan ditentukan berdasarkan permintaan pengguna

Opini GN⁺

  • Pentingnya data deret waktu: Pentingnya data deret waktu terus meningkat di berbagai bidang seperti IoT, keuangan, dan analitik web. pg_timeseries menyediakan alat untuk mengelola data tersebut secara efisien.
  • Skalabilitas PostgreSQL: Dengan memanfaatkan kemampuan ekstensi PostgreSQL, berbagai pekerjaan data dapat ditangani. pg_timeseries mengintegrasikan kemampuan ini untuk meningkatkan kemudahan penggunaan.
  • Kolaborasi dengan komunitas: Dikembangkan sebagai open source sehingga umpan balik komunitas dapat tercermin. Ini sangat membantu dalam peningkatan fitur dan perbaikan bug.
  • Produk pesaing: Dibandingkan dengan database deret waktu lain seperti TimescaleDB, ada keunggulan karena dapat digunakan tanpa batasan lisensi. Namun, performa dan fiturnya tetap perlu ditinjau secara komparatif.
  • Pertimbangan adopsi: Saat mengadopsi pg_timeseries, perlu mempertimbangkan kompatibilitas dengan database yang ada, performa, dan biaya pemeliharaan. Selain itu, karena karakteristik data deret waktu dapat menyebabkan volume data melonjak cepat, diperlukan pengelolaan penyimpanan yang tepat.

1 komentar

 
GN⁺ 2024-05-21
Opini Hacker News

Ringkasan kumpulan komentar Hacker News

  • Incremental Materialized Views

    • Incremental materialized views adalah fitur inti, yang memungkinkan data tetap mutakhir setiap kali data masuk tanpa penurunan performa.
    • Muncul pertanyaan apakah akan menggunakan implementasi seperti pg_ivm atau membangunnya sendiri.
    • Ada harapan agar suatu hari nanti ivm dimasukkan ke dalam core PostgreSQL.
  • Perbandingan dengan TimescaleDB

    • Karena pembatasan lisensi TimescaleDB, fitur seperti kompresi, incremental materialized view, dan infinite storage tidak bisa digunakan.
    • Karena dinilai kebutuhan data deret waktu pelanggan tidak dapat dipenuhi tanpa fitur-fitur tersebut, mereka membangun sendiri ekstensi berlisensi PostgreSQL.
    • Ada pengalaman melakukan sharding database observasi berisi 500 juta data menggunakan TimescaleDB versi gratis. Sistemnya berjalan tanpa masalah besar.
    • Akan lebih baik jika ada benchmark dan hasil perbandingan. Akan terus dipantau.
  • Tabel Append-Only

    • Sudah waktunya PostgreSQL dan database lain menambahkan tabel append-only native.
    • Ini memang bukan database deret waktu, tetapi akan membantu dari sisi logika dan pendekatan terkait standardisasi.
  • Evolusi database deret waktu

    • Database deret waktu sedang berevolusi sebagai berikut:
      • Konvergensi ke penyimpanan kolumnar dan format terbuka seperti Parquet dan Arrow: InfluxDB 3.0, QuestDB
      • Menambahkan fitur deret waktu di atas PostgreSQL: Timescale, pg_timeseries
      • Platform observability yang berpusat pada ekosistem Prometheus: Grafana, Victoria Metrics, Chronosphere
  • Kebutuhan akan penyimpanan kolumnar

    • Sebagian besar kueri deret waktu adalah kueri agregasi.
    • Untuk itu, sebaiknya memanfaatkan atau membangun penyimpanan kolumnar kelas atas.
    • Ada pertanyaan mengapa produk seperti ClickHouse tidak ada di PostgreSQL.
  • Tautan yang berguna

    • Terima kasih karena jadi mengetahui trunk dan pgt.dev.
  • Entri log load balancer

    • Ada pertanyaan apakah ekstensi ini akan berguna saat menangani entri log load balancer (status, body respons, header, dan sebagainya).
    • Penyimpanan database kolumnar tampaknya akan lebih efisien dibanding database berbasis baris pada umumnya.
    • Entri log load balancer dapat dianggap mirip dengan event analitik.
  • Inovasi open source

    • PostgreSQL selalu bersifat open source dan telah lama menggunakan library open source yang sangat permisif.
    • Selama ini ada berbagai ekstensi proprietary maupun source-available, mulai dari replikasi hingga dukungan deret waktu.
    • Kini ekstensi-ekstensi proprietary tersebut mulai ditantang oleh alternatif open source yang layak.
  • Lisensi PostgreSQL

    • Menggunakan lisensi PostgreSQL adalah keputusan yang baik.
  • Desain situs dan UI aplikasi

    • Desain situsnya bagus dan mudah dibaca.
    • UI aplikasinya juga terlihat sangat baik di foto demo. Ada minat untuk mencobanya.