Skip to main content

Sık Sorulan Sorular ve Troubleshooting

S: Neden measurement verisi tek tabloda değil de ayrı segment tablolarında saklanıyor?

Her enerji paketi aynı anda gerilim, akım, güç, enerji, cihaz durumu ve çevresel ölçüm alanlarını birlikte taşır. Bunları tek geniş tabloda toplamak, her sorgunun ihtiyaç duymadığı kolonları da taraması anlamına gelir. Segment tabloları yazma ve sorgu maliyetini kontrol altında tutar; yalnız ilgili segmente ihtiyaç duyan sorgular yalnız o tabloya gider.


S: Kalibrasyon segmentleri ile pass-through segmentleri arasındaki fark nedir?

  • Kalibrasyon segmentleri (measurements_voltage, measurements_current, measurements_power, measurements_energy): Kalibrasyon Servisi tarafından CT dönüşümü ve gain/offset uygulanmış değerleri buffers.measurements'dan okuyarak yazar.
  • Pass-through segmentleri (measurements_device, measurements_register, measurements_environment, measurements_water, measurements_location): Kalibrasyon işlemi uygulanmaz; ilgili alanlar buffers.measurements içinden olduğu gibi okunur ve typed tablolara dağıtılır.

S: measurements_environment, measurements_water ve measurements_location her pakette yazılıyor mu?

Hayır. Bu üç segment opsiyoneldir:

  • measurements_environment: Pakette çevresel ölçüm alanları (AH, AT, SM* vb.) varsa yazılır.
  • measurements_water: Pakette su basıncı (WP) alanı varsa yazılır.
  • measurements_location: Pakette konum alanları (LATITUDE, LONGITUDE vb.) varsa yazılır.

Paket bu alanları taşımıyorsa ilgili segment tablosuna kayıt açılmaz; bu durum hata değildir. written_segments listesinde de bu segmentler yer almaz.


S: Yazım transaction modeli nedir? Tek bir segment başarısız olursa ne olur?

Tüm segment yazımları all-or-nothing modelde çalışır: segmentlerin tamamı başarıyla yazılabilirse commit uygulanır, herhangi biri başarısız olursa tüm yazım rollback edilir ve raw.failed.v1 üretilir. Hatalı segment adı error.failed_table alanında belirtilir.


S: Aynı stream_id tekrar işlenirse ne olur?

Yazım stream_id üzerinden idempotent upsert ile yapılır. Aynı stream_id tekrar gelirse mevcut satır güncellenir, yeni satır açılmaz. Bu durum güvenlidir ve replay akışlarında da beklenen davranıştır.


S: Kafka publish başarısız olursa yazılan veri kaybolur mu?

Hayır. DB yazımı ve Redis güncellemesi başarıyla tamamlandığında veriler korunur. Kafka publish hatası outbox/retry mekanizmasıyla yeniden denenir; downstream (Sentez Servisi) gecikir fakat veri kaybı oluşmaz.


S: raw.failed.v1 üretildiğinde stream verisi geri alınabilir mi?

Evet. İşlenemeyen stream için Ingest katmanındaki raw_data kaydı ve event/log izi korunur. Replay servisi bu kayıt üzerinden yeni bir akış başlatabilir. Yazım idempotent olduğu için tekrar işleme güvenlidir.


S: measurements_device tablosundaki B_IV, RSSI gibi alanlar kalibre ediliyor mu?

Hayır. Cihaz durum alanları (B_IV, B_AV, RSSI, WDS vb.) pass-through segmentidir. Kalibrasyon Servisi bu alanlara müdahale etmez; buffers.measurements içinden olduğu gibi okunur ve measurements_device tablosuna yazılır.


S: Hangi metrikler kritik izlenmeli?

MetrikAlarm Eşiği
raw_writer_segment_write_failures> 0 ise kritik
raw_writer_failed_rate> %1 ise alarm
raw_writer_process_latency_msSürekli artışta alarm
raw_writer_redis_update_failures> 0 ise kritik
raw_writer_kafka_publish_failures> 0 ise retry/outbox takibi

S: Hiçbir segment tablosuna girmeyen alanlar nereye yazılır?

Bu alanlar measurements tablosuna narrow-row formatında yazılır. Her değişken ayrı bir satır olur:

  • variable_id: Değişken adı (örn. TEMP, HUM)
  • value: Skalar ölçüm değeri
  • calibrated: Bu değere kalibrasyon uygulanmış mı

stream_id + variable_id unique kısıtlaması sayesinde aynı stream içinde aynı değişken iki kez yazılamaz. Bu tablo tüm telemetry verisinin ana deposu değildir; düşük yoğunluklu ve segment dışı skalar alanlar için özellikle kullanılır.


S: Örnek bir catch-all yazımı nasıl görünür?

Paket içinde TEMP = 24.7 geldi ve bu değer hiçbir typed segment tablosuna girmiyorsa:

{
"stream_id": 9823412,
"variable_id": "TEMP",
"value": 24.700000,
"calibrated": false,
"synthesized": false
}

Aynı stream içinde HUM = 48.2 de gelirse ayrı bir satır olarak eklenir.


S: Bu servisin detay akışlarını nerede görebilirim?