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ğerleribuffers.measurements'dan okuyarak yazar. - Pass-through segmentleri (
measurements_device,measurements_register,measurements_environment,measurements_water,measurements_location): Kalibrasyon işlemi uygulanmaz; ilgili alanlarbuffers.measurementsiç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,LONGITUDEvb.) 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?
| Metrik | Alarm Eşiği |
|---|---|
raw_writer_segment_write_failures | > 0 ise kritik |
raw_writer_failed_rate | > %1 ise alarm |
raw_writer_process_latency_ms | Sü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ğericalibrated: 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.