• 03-06-2025, 11:31:20
    #1
    selamlar herkese bir rapor toolu oluşturacağım. Kurumsal firmalar için ancak mssql'den çekmem gerekiyor. düz select attığımda bile 60 saniyede geliyor daha joinleri yapmadan viewdan çektiğimde de aşağı yukarı aynı oluyor. json olarak dışarı aktardığımda 30 gb gibi bir veri var sadece yılbaşından bu yana 5m satır kadar. ben sürekli yeni veri alarak yeni raporlar oluşturmam gerekiyor sunucuda 32 gb ram ortalama üstünde bir işlemci mevcut. bulut sunucuda benim rapor aracım olacak neler ve nasıl bir yol önerirsiniz
  • 03-06-2025, 11:35:27
    #2
    where kullandığınız sütunlara indeks atmalısınız. benzersiz verilerin olduğu sütunlar varsa bunlarada uniqiue key atmalısınız. bahsettiğiniz gibi bir sisteminiz varsada mysql.conf buna göre optimize etmelisiniz.
  • 03-06-2025, 11:55:36
    #3
    ✅ Çözüm Stratejisi

    1. Veri Katmanı: ETL / Data Lake Yaklaşımı


    MSSQL’i direkt sorgulamak yerine, veriyi belirli aralıklarla çekip dış ortamda işlemek gerekiyor.

    🔹 ETL Süreci (Extract, Transform, Load)

    • Extract: MSSQL'den günlük/saatlik fark bazlı veri çekin (örneğin CreatedDate > LastRunTime)
    • Transform: Gereksiz kolonları atın, mümkünse flat (düz) hale getirin, ilişkisel karmaşıklığı azaltın.
    • Load:
      • Veriyi parquet, orc veya jsonl formatında sıkıştırarak saklayın (tercihen bir bulut depoda: S3, Azure Blob, GCS).
      • Alternatif olarak bir veri ambarına yükleyin (örneğin PostgreSQL, ClickHouse, BigQuery).
    Eğer sadece JSON'a yazıp bırakıyorsanız bu sadece veri taşıma olur. Sorgulama için optimize edilmesi gerekir.
  • 03-06-2025, 11:55:53
    #4
    json çıkısı darboğaza sebeb oluyor 30gb veri diyorsunuz. verileri farklı sql ile çekebilirsin mssqldeki büyük verileri anlık direk almak yere belli aralıklarla postegrosqlden çek, ETL aracılığyla yani verileri önceden başka sistemde çekip saklayacaksın sonra çekeceksin.
  • 03-06-2025, 12:05:51
    #5
    👑 Smm Panel Yazılımı 👑
    +50gb bir veriyi mysql’e aktarıp, daha sonra o verileri sorgulayan bir sistem yapmamız talep edildi.
    şu an elinizdeki verinin yapısını tam bilmiyorum ama biz önce veriyi elimizden geldiğince minimize etmeye çalıştık. örnek vermek gerekirse;
    isim diye bir tablomuz olsun, içindeki verileri daha optimize şekilde tutalım:
    ahmet
    mehmet
    hakan
    ali
    bu isimleri direkt varchar(255) olarak tutmak hem fazla yer kaplar hem de sorgularda yavaşlamaya sebep olur. bunun yerine her bir isim için bir id belirleyip, isimleri ayrı bir tabloda tutmak daha verimli olur(genel olarak bazı sütünlardaki veriler bir standarttaysa ve genelde 30-40 karakteri yada 20 karakteri geçmiyorsa 255 kullanmak veriyi büyütür ve optimize olmaz).
    örneğin:
    1 - ahmet
    2 - mehmet
    3 - hakan
    4 - ali
    ana tabloda ise sadece bu id’leri tutarsın. rapor ekranında da bu id’ye göre karşılık gelen ismi bastırırsın. böylece hem sorgular daha hızlı döner hem de veri daha az yer kaplar.
    bizde kod, aldığı sorguyu rapora dökerken bu int değerlerinin karşılıklarına göre veriyi gösteriyor. bu yöntemle ciddi bir performans artışı elde ettik.

    Net karımız : 50gb veriyi 30gb a kadar düşürdük. 30-40 saniye süren sorgulara 6 saniyeye kadar indirdik.