Takip et

TimescaleDB Nedir ve Neden Kullanmalısınız?

TimescaleDB Nedir ve Neden Kullanmalısınız? Zaman serisi verileri, günümüzün dijital dünyasında giderek daha fazla önem kazanmaktadır. I

TimescaleDB Nedir ve Neden Kullanmalısınız?

Zaman serisi verileri, günümüzün dijital dünyasında giderek daha fazla önem kazanmaktadır. IoT cihazlarından finansal piyasa verilerine, sunucu performans metriklerinden sensör okumalarına kadar birçok alanda sürekli akan veri akışlarını depolamak, analiz etmek ve sorgulamak kritik hale gelmiştir. Geleneksel ilişkisel veritabanları, bu tür verilerin büyük hacimleriyle başa çıkmakta zorlanabilirken, TimescaleDB gibi özel olarak zaman serisi verileri için tasarlanmış çözümler öne çıkmaktadır.

TimescaleDB, PostgreSQL tabanlı, açık kaynaklı bir zaman serisi veritabanıdır. PostgreSQL’in güvenilirliğini, esnekliğini ve zengin ekosistemini korurken, zaman serisi verilerine özgü performans ve ölçeklenebilirlik yetenekleri ekler. Temel olarak bir PostgreSQL uzantısı (extension) olarak çalıştığı için, mevcut PostgreSQL araç ve becerilerinizi kullanarak zaman serisi verilerinizi yönetebilirsiniz.

TimescaleDB Kullanmanın Avantajları:

  • Performans ve Ölçeklenebilirlik: Verileri otomatik olarak zaman aralıklarına göre parçalayarak (chunking) ve sıkıştırarak sorgu performansını artırır ve depolama maliyetlerini düşürür.
  • Full SQL Desteği: PostgreSQL’in tüm gücünü ve esnekliğini kullanmaya devam edersiniz. Karmaşık sorgular, join’ler, indeksler ve fonksiyonlar zaman serisi verileriniz üzerinde de çalışır.
  • Otomatik Parçalama (Automatic Partitioning): Zaman bazlı parçalama işlemini sizin yerinize otomatik olarak yönetir. Bu, manuel parça yönetimi yükünü ortadan kaldırır.
  • Veri Sıkıştırma: Eski verileri sıkıştırarak depolama alanından tasarruf sağlar ve sorgu performansını artırır.
  • Sürekli Toplamalar (Continuous Aggregates): Sıkça sorgulanan özet verileri arka planda otomatik olarak önbelleğe alarak sorgu hızını önemli ölçüde artırır.
  • Geniş Ekosistem Entegrasyonu: PostgreSQL tabanlı olduğu için Grafana, Tableau gibi birçok BI ve görselleştirme aracıyla kolayca entegre olabilir.

CentOS 7 Üzerine TimescaleDB Kurulumu İçin Ön Hazırlıklar

TimescaleDB kurulumuna başlamadan önce, CentOS 7 sunucunuzun bazı temel gereksinimleri karşıladığından ve gerekli ön hazırlıkların yapıldığından emin olmalıyız. TimescaleDB bir PostgreSQL uzantısı olduğu için öncelikle PostgreSQL’in kurulu ve çalışır durumda olması gerekmektedir.

Sistem Güncellemesi ve Temel Paketler

Herhangi bir kuruluma başlamadan önce sistem paket listesini güncellemek ve mevcut paketleri yükseltmek iyi bir uygulamadır:

sudo yum update -y
sudo yum install -y epel-release # Gerekli olabilecek ek paketler için

PostgreSQL Kurulumu

CentOS 7’nin varsayılan depolarında bulunan PostgreSQL sürümü genellikle eski olabilir. TimescaleDB’nin en güncel özelliklerinden faydalanmak ve daha iyi performans elde etmek için PostgreSQL’in daha yeni bir sürümünü (örneğin PostgreSQL 13 veya 14) kurmanız önerilir. Bunun için PostgreSQL YUM deposunu eklememiz gerekmektedir:

# PostgreSQL YUM deposunu ekleyin
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

PostgreSQL 13 sunucu ve istemci paketlerini kurun (isteğe bağlı olarak 14 de seçilebilir)

sudo yum install -y postgresql13-server postgresql13

Veritabanını başlatın

sudo /usr/pgsql-13/bin/postgresql-13-setup initdb

PostgreSQL servisini etkinleştirin ve başlatın

sudo systemctl enable postgresql-13 sudo systemctl start postgresql-13

Bu adımlarla PostgreSQL 13 başarıyla kurulmuş ve çalışır duruma getirilmiş olmalıdır. postgresql-13 yerine kurduğunuz sürüme göre postgresql-XX kullanmayı unutmayın.

TimescaleDB Deposu Ekleme

TimescaleDB paketlerini indirmek için TimescaleDB’nin kendi YUM deposunu sistemimize eklememiz gerekmektedir:

sudo tee /etc/yum.repos.d/timescale_timescaledb.repo <

Bu komut, TimescaleDB deposunu /etc/yum.repos.d/ dizinine ekleyecektir. Artık TimescaleDB paketlerini yum komutuyla kurmaya hazırız.

TimescaleDB Kurulumu ve Yapılandırması

Ön hazırlıkları tamamladığımıza göre, TimescaleDB'yi kurma ve PostgreSQL ile entegre etme adımlarına geçebiliriz.

TimescaleDB Paketini Kurma

TimescaleDB paketini kurmak için aşağıdaki komutu kullanın. PostgreSQL sürümünüze uygun paketi seçtiğinizden emin olun (örneğin, PostgreSQL 13 için timescaledb-2-postgresql-13):

sudo yum install -y timescaledb-2-postgresql-13

PostgreSQL Yapılandırması (postgresql.conf)

TimescaleDB'nin PostgreSQL ile düzgün çalışabilmesi için postgresql.conf dosyasında bazı değişiklikler yapılması gerekmektedir. TimescaleDB, bu optimizasyonları kolaylaştırmak için timescaledb-tune adında bir araç sunar. Bu araç, sunucunuzun kaynaklarına (RAM, CPU vb.) göre en uygun yapılandırma ayarlarını önerir.

# PostgreSQL yapılandırma dosyasının yolunu belirtin

PostgreSQL 13 için varsayılan yol: /usr/pgsql-13/bin/pg_config

sudo timescaledb-tune --pg-config=/usr/pgsql-13/bin/pg_config

Bu komut, postgresql.conf dosyasında yapılması gereken değişiklikleri size gösterecektir. Genellikle aşağıdaki gibi bir çıktı alırsınız:

Detected PostgreSQL configuration file at: /var/lib/pgsql/13/data/postgresql.conf
Detected PostgreSQL data directory at: /var/lib/pgsql/13/data

Recommendations for postgresql.conf:

shared_preload_libraries = 'timescaledb'
max_connections = 100
shared_buffers = 128MB
effective_cache_size = 384MB
maintenance_work_mem = 64MB
work_mem = 4MB
wal_buffers = 16MB
min_wal_size = 80MB
max_wal_size = 1GB
default_statistics_target = 100
random_page_cost = 4.0
cpu_tuple_cost = 0.01
cpu_index_tuple_cost = 0.005
cpu_operator_cost = 0.0025
effective_io_concurrency = 1
max_worker_processes = 8
max_parallel_workers = 8
max_parallel_workers_per_gather = 2

For best results, please add these to your postgresql.conf file.

Bu önerileri uygulamak için, postgresql.conf dosyasını bir metin düzenleyici ile açın ve önerilen satırları ekleyin veya mevcut değerleri değiştirin. En kritik olanı, shared_preload_libraries satırına timescaledb eklemektir:

sudo vi /var/lib/pgsql/13/data/postgresql.conf

Dosyada shared_preload_libraries satırını bulun ve şu şekilde güncelleyin:

shared_preload_libraries = 'timescaledb'

Diğer önerilen ayarları da (örneğin max_connections, shared_buffers vb.) dosyanıza ekleyebilir veya güncelleyebilirsiniz. Değişiklikleri kaydettikten sonra PostgreSQL servisini yeniden başlatmanız gerekmektedir:

sudo systemctl restart postgresql-13

Veritabanı Oluşturma ve TimescaleDB Uzantısını Etkinleştirme

Şimdi TimescaleDB uzantısını kullanacağımız bir veritabanı oluşturup bu veritabanında uzantıyı etkinleştirmeliyiz.

# postgres kullanıcısı olarak psql'e bağlanın
sudo -u postgres psql

Yeni bir veritabanı oluşturun

CREATE DATABASE timeseries_db;

Oluşturduğunuz veritabanına bağlanın

\c timeseries_db

TimescaleDB uzantısını etkinleştirin

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

Uzantının başarıyla yüklendiğini kontrol edin

SELECT * FROM pg_extension WHERE extname = 'timescaledb';

psql'den çıkın

\q

extname değeri timescaledb olan bir satır görüyorsanız, kurulum başarılı demektir!

TimescaleDB Kullanımına Başlama: Temel Kavramlar ve Örnekler

TimescaleDB'yi kurup yapılandırdıktan sonra, zaman serisi verilerinizi depolamak ve sorgulamak için kullanmaya başlayabiliriz.

Hypertable Oluşturma

TimescaleDB'nin en temel kavramı "hypertable"dır. Hypertable, normal bir PostgreSQL tablosu gibi görünür ve çalışır, ancak arka planda TimescaleDB'nin otomatik parçalama, sıkıştırma ve performans optimizasyonlarından faydalanır. Bir hypertable oluşturmak için önce normal bir tablo tanımlar, ardından bu tabloyu create_hypertable fonksiyonu ile hypertable'a dönüştürürsünüz.

-- Bağlantı oluşturduğunuz veritabanına (timeseries_db)
-- sudo -u postgres psql -d timeseries_db

-- Normal bir tablo oluşturun
CREATE TABLE sensor_data (
    time TIMESTAMPTZ NOT NULL,
    device_id INT,
    temperature DOUBLE PRECISION,
    humidity DOUBLE PRECISION
);

-- Bu tabloyu 'time' sütununu kullanarak bir hypertable'a dönüştürün
SELECT create_hypertable('sensor_data', 'time');

Burada time sütunu, zaman serisi verilerinin anahtar sütunudur ve TIMESTAMPTZ (zaman dilimi destekli zaman damgası) veri tipinde olmalıdır. create_hypertable fonksiyonu, bu sütunu kullanarak verileri otomatik olarak parçalamaya başlayacaktır.

Veri Ekleme (INSERT)

Hypertable'lara veri eklemek, normal PostgreSQL tablolarına veri eklemekle aynıdır:

INSERT INTO sensor_data (time, device_id, temperature, humidity) VALUES
(NOW(), 1, 25.5, 60.2),
(NOW() - INTERVAL '1 minute', 1, 25.0, 60.0),
(NOW() - INTERVAL '2 minutes', 2, 22.1, 55.3),
(NOW() - INTERVAL '5 minutes', 1, 24.8, 61.0);

Veri Sorgulama (SELECT)

TimescaleDB, zaman serisi verileri için optimize edilmiş özel fonksiyonlar sunsa da, standart SQL sorgularınızı da kullanabilirsiniz.

Temel Sorgular:

-- Son eklenen 5 veriyi görüntüle
SELECT * FROM sensor_data ORDER BY time DESC LIMIT 5;

-- Son 1 saat içindeki verileri filtrele
SELECT * FROM sensor_data WHERE time > NOW() - INTERVAL '1 hour';

-- Belirli bir cihazın son 30 dakikadaki sıcaklık verilerini al
SELECT time, temperature FROM sensor_data
WHERE device_id = 1 AND time > NOW() - INTERVAL '30 minutes'
ORDER BY time ASC;

Zaman Tabanlı Agregasyonlar (time_bucket):

TimescaleDB'nin en güçlü özelliklerinden biri, verileri belirli zaman aralıklarına göre gruplamak için kullanılan time_bucket fonksiyonudur. Bu, zaman serisi analizlerinde ortalama, maksimum, minimum gibi değerleri hesaplamak için çok kullanışlıdır.

-- Her 15 dakikada bir cihazın ortalama sıcaklığını ve nemini hesapla
SELECT
    time_bucket('15 minutes', time) AS fifteen_min_interval,
    device_id,
    AVG(temperature) AS avg_temp,
    AVG(humidity) AS avg_humidity
FROM sensor_data
GROUP BY fifteen_min_interval, device_id
ORDER BY fifteen_min_interval DESC, device_id;

time_bucket('15 minutes', time) ifadesi, time sütunundaki zaman damgalarını 15 dakikalık dilimlere böler ve her dilim için bir başlangıç zamanı döndürür.

Veri Sıkıştırma (Opsiyonel ama Önemli)

Büyük hacimli zaman serisi verileriyle çalışırken depolama maliyetleri önemli olabilir. TimescaleDB, eski verileri sıkıştırarak bu maliyetleri düşürmenize yardımcı olur. Sıkıştırma, hypertable'ınız üzerinde bir politika olarak ayarlanır.

-- Hypertable'da sıkıştırmayı etkinleştirin
ALTER TABLE sensor_data SET (timescaledb.compress = TRUE);

-- Sıkıştırma için hangi sütunların nasıl sıkıştırılacağını belirtin (isteğe bağlı)
ALTER TABLE sensor_data ADD COLUMN IF NOT EXISTS device_id_compressed INT; -- Örnek: sıkıştırılacak sütun

-- 7 günden eski verileri sıkıştırmak için bir sıkıştırma politikası oluşturun
SELECT add_compression_policy('sensor_data', INTERVAL '7 days');

Bu komutlar, 7 günden eski verilerin otomatik olarak sıkıştırılmasını sağlayacaktır. Sıkıştırılmış veriler hala sorgulanabilir durumdadır, ancak yazma performansı düşebilir.

Sonuç ve Sıkça Sorulan Sorular (SSS)

Bu rehberde, CentOS 7 üzerinde TimescaleDB'yi adım adım nasıl kuracağınızı ve temel kullanımını öğrendiniz. PostgreSQL'in gücünü zaman serisi verileriyle birleştiren TimescaleDB, IoT, izleme, finansal analiz ve daha birçok alanda ölçeklenebilir ve performanslı çözümler sunar. Artık hypertable'lar oluşturabilir, veri ekleyebilir ve güçlü SQL sorgularıyla zaman serisi verilerinizi analiz edebilirsiniz. İleri seviye özellikler olan sürekli toplamalar, veri sıkıştırma politikaları ve downsampling gibi konuları keşfetmeniz, TimescaleDB deneyiminizi daha da zenginleştirecektir.

Sıkça Sorulan Sorular (SSS)

TimescaleDB ücretli mi?

TimescaleDB'nin temel sürümü tamamen açık kaynaklı ve ücretsizdir. TimescaleDB Enterprise sürümü ise ek özellikler ve destek sunar, ancak çoğu kullanım durumu için açık kaynak sürüm yeterlidir.

Hangi PostgreSQL sürümleriyle uyumlu?

TimescaleDB genellikle PostgreSQL'in son 3-4 ana sürümüyle uyumludur. Bu rehberde PostgreSQL 13 kullanıldı, ancak TimescaleDB'nin resmi belgelerinden en güncel uyumluluk bilgilerini kontrol etmeniz önerilir.

Verilerimi nasıl yedeklerim?

TimescaleDB, standart PostgreSQL yedekleme araçlarıyla (örneğin pg_dump ve pg_restore) uyumludur. Hypertable'lar da normal tablolar gibi yedeklenir. Ek olarak, TimescaleDB, büyük veritabanları için özel yedekleme ve geri yükleme araçları da sunabilir.

Performans sorunları yaşarsam ne yapmalıyım?

Performans sorunları yaşıyorsanız şunları kontrol edebilirsiniz:

  • timescaledb-tune aracını tekrar çalıştırarak yapılandırma önerilerini uyguladığınızdan emin olun.
  • Sorgularınız için uygun indeksler (özellikle time sütununda) oluşturun.
  • Hypertable'ınızın chunk (parça) boyutlarını ve zaman aralıklarını optimize edin.
  • Veri sıkıştırma politikalarını uygulayarak eski verilerin performansını artırın.
  • PostgreSQL loglarını ve sorgu planlarını (EXPLAIN ANALYZE) inceleyerek darboğazları tespit edin.

CentOS 7 dışında başka işletim sistemlerinde kurulabilir mi?

Evet, TimescaleDB birçok farklı platformda kurulabilir. Debian/Ubuntu gibi Linux dağıtımları, Docker kapsayıcıları ve bulut platformları (AWS, Google Cloud, Azure) üzerinde de TimescaleDB kurulumu mümkündür. Kurulum adımları işletim sistemine göre farklılık gösterebilir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.