Hoş Geldiniz! KablosuzForum.net

Tüm özelliklerimize erişmek için şimdi bize katılın. Kaydolup giriş yaptıktan sonra konu oluşturabilir, mevcut konulara yanıt gönderebilir, diğer üyelerinize itibar kazandırabilir, kendi özel mesajlaşma programınızı edinebilir ve çok daha fazlasını yapabileceksiniz. Aynı zamanda hızlı ve tamamen ücretsizdir, peki daha ne bekliyorsunuz?

Soru Sor

Merak ettiğiniz, kafanıza takılan sorular hakkında konu açın, diğer üyelerimiz ve moderatörlerimiz cevaplasın.

Ticaret

Ticari konular açıp güven oluşturmak ve daha fazla satış rakamlarına ulaşmak için hesabını doğrula!

Bize ulaşın

Yönetim kadrosuyla iletişime geçin

Üyeliğini Yükselt!

Üyeliğinizi yükselterek birbirinden ayrıcalıklı özelliklere sahip olun!

PostgreSQL ile IoT Verilerini Bölgenize Bölün: Parçalı Tablolar ve Kısmi İndekslerin Büyüsü

Resim 1 Resim 2

alsalehgeth

Geth Al Saleh
KF Kullanıcı
Katılım
17 Eki 2024
Mesajlar
3
Tepkime puanı
3
Puanları
1

PostgreSQL ile IoT Verilerini Bölgenize Bölün: Parçalı Tablolar ve Kısmi İndekslerin Büyüsü​


Merhaba veri tutkunları! Bugün, **PostgreSQL**’in* gücünden yararlanarak IoT (İnternet of Things) verilerini iki farklı ama birbiriyle birleşik yaklaşımla nasıl optimize edeceğimizi keşfedeceğiz. Kısaca; *parçalı tablolar* ve *kısmi indeksler* ile milyonlarca sensör okuyuşunu saniyeler içinde sorgulamak mümkün.

---

## 1. Parçalı Tablo Nedir ve Neden Kullansın?

PostgreSQL 10’dan itibaren **table partitioning** (tablo bölme) özelliği standart olmuştur. IoT senaryolarında, cihaz verileri genellikle **timestamp** veya **sensor ID** gibi alanlara göre gruplanır. Bir tabloyu parçalara bölmek:

- Veri maliyetini düşürür – sadece ilgili bölme okunur.
- Takip edilmekte olan verilerin arşivlenmesini kolaylaştırır.
- Yüksek yazma oranlarına sahip senaryolarda paralel sorgu dağılımı sağlar.

Örnek: `sensor_readings` tablosunu her ay için bir bölüm olarak ayıralım.

```
CREATE TABLE sensor_readings (
device_id uuid,
reading_type text,
reading_value numeric,
ts timestamptz NOT NULL
) PARTITION BY RANGE (ts);

CREATE TABLE sensor_readings_2023_01 PARTITION OF sensor_readings
FOR VALUES FROM ('2023-01-01') TO ('2023-02-01');
-- Gerekirse 12 ay için aynı yapıyı çoğalttık.
```

## 2. Kısmi İndeksle Sorgu Performansı Nasıl Artırılır?

Kısmi indeks, *tablo içindeki belirli satırlar* için indeks oluşturur. IoT’de belirli sensör tipleri, yüksek/az değerleri veya sık sorgulanan ölçü alanları için idealdir.

Örnek: Sadece **temperature** ölçümleri için indeks.

```
CREATE INDEX idx_temp ON sensor_readings (device_id, ts)
WHERE reading_type = 'temperature';
```

Bu indeks, temperature sorgularında sadece ilgili satırları tarar; diğer ölçü tipleri için algoritma atlanır.

## 3. Sorgu Örneği: 2023’te En Sıcaklık Ölçümleri

```sql
SELECT device_id, MAX(reading_value) AS max_temp, MAX(ts) AS at
FROM sensor_readings
WHERE ts >= '2023-01-01' AND ts < '2024-01-01'
AND reading_type = 'temperature'
GROUP BY device_id
ORDER BY max_temp DESC
LIMIT 10;
```

Bu sorgu:

1. **Partition pruning** ile yalnızca 2023 ay tabanlarından okur.
2. Kısmi indeks üzerinden *device_id* ve *ts* kolonu tarar.
3. Mükemmel hızla üst 10 cihazı döndürür.

## 4. Otomatik Arşivleme Stratejisi

Müşteri verilerinizin yasal saklama süreleri farklı olabileceğinden, partisyonları bağımsız olarak **VACUUM** veya **REINDEX** yapmak tavsiye edilir.

```
-- 2022 partisyonunu kopyala
CREATE TABLE sensor_readings_2022 AS
SELECT * FROM sensor_readings_2022 PARTITION;
-- Eski partisyonu sil
DROP TABLE sensor_readings_2022;
```

Bu, eski verileri bir arşivlemede tutarken yeni veri akışına müdahale etmez.

---

**Son Kelime:** Postgres’in parçalı tabloları ve kısmi indeksleri, IoT projelerinizde performansı katlamak için güçlü bir araçtır. Adım adım yapılandırarak, veri büyümesinin kapanışını önleyebilir ve sorgularınızı saniyeler içinde sonuçlandırabilirsiniz. Deneyiminizi paylaşmak için yorum bırakın – belki siz de farklı bir partition key deneyebilirsiniz!

---

İyi kodlar ve hızlı sorgular! - DBExpert

photo-1761168129112-4ddc297dc797
 
Responsive GIF Layout

shape1
shape2
shape3
shape4
shape5
shape6
Geri
Üst