2026-05-31 15:23:37 +03:00
2026-05-31 15:23:37 +03:00
2026-05-31 15:23:37 +03:00
2026-05-31 15:23:37 +03:00
2026-05-31 15:23:37 +03:00
2026-05-31 15:23:37 +03:00
2026-05-31 15:23:37 +03:00
2026-05-31 15:23:37 +03:00
2026-05-31 15:23:37 +03:00
2026-05-31 15:23:37 +03:00
2026-05-31 15:23:37 +03:00

hBarkodDB - Akıllı Barkod Veritabanı ve Tarayıcı

Bu proje, adresler.html dosyasındaki ürün linklerini (barkodist.com) asenkron olarak tarayarak Ürün Adı, Ürün Resmi, Kategorisi, Ait Olduğu Şirket ve Barkod Numarasını ayıklayan ve bunları bir veritabanında toplayan akıllı bir otomasyon sistemidir.

Proje, tarama sürecini kontrol edebileceğiniz, veriler içinde arama yapıp düzenleme gerçekleştirebileceğiniz ve EAN-13 Barkod ile QR Kod üretebileceğiniz premium görünümlü, modern bir karanlık mod web arayüzüne sahiptir.


🚀 Mimaride Yapılan Son Güncelleştirmeler ve İyileştirmeler

1. In-Memory Batching Queue Manager (MySQL Kilitlenme Çözümü)

  • Sorun: 5 asenkron işçi (thread) veritabanından aynı anda "pending" durumundaki URL'leri okumaya ve "processing" olarak güncellemeye çalıştığında, MySQL üzerinde satır kilitlenmeleri (deadlock) ve transaction çakışmaları meydana geliyordu.
  • Çözüm: Sunucu belleğinde (RAM) çalışan ortak bir kuyruk yöneticisi (getNextQueueItem) geliştirildi. İşçiler veritabanını tek tek satır düzeyinde sorgulamak yerine, tek sorguda 20 adet pending URL'yi topluca çekerek veritabanında processing durumuna çeker ve RAM'de sırayla tüketir. Bu sayede veritabanı kilitlenmeleri tamamen engellenmiş ve tarama performansı maksimize edilmiştir.

2. HTTP Short-Polling Fallback (Anlık Gösterim Yedek Sistemi)

  • Sorun: Server-Sent Events (SSE) protokolü, tarayıcı ayarları, kurumsal güvenlik duvarları veya yerel ağ proxy yapılandırmaları nedeniyle anlık log akışını ve istatistikleri bloke edebiliyordu. Bu durumda arayüz bağlantı aşamasında takılı kalıyordu.
  • Çözüm: Ön yüzde app.js içerisine akıllı bir yedek sistem yazıldı. SSE bağlantısı 2.5 saniye içinde kurulamadığı veya koptuğu anda, sistem otomatik olarak HTTP kısa sorgulama (Short-Polling) moduna geçerek her 1.5 saniyede bir /api/stats endpoint'ini sorgular. Bu sayede canlı panel her şartta kesintisiz çalışır.

3. Eşsiz URL Ayıklama (Kuyruk Süzgeci)

  • adresler.html dosyası içinde toplam 91,592 adet ürün bağlantısı yer almaktadır.
  • Ancak bu linkler mükerrer (aynı ürün adresinin birden fazla kez tekrarlanması) kayıtlar barındırır.
  • Veritabanı bütünlüğünü korumak ve mükerrer taramayı engellemek adına kuyruk tablosundaki url sütununa benzersizlik (@unique) kısıtı getirilmiştir.
  • Yapılan analiz sonucunda dosyada tam olarak 11,439 adet benzersiz ürün adresi olduğu tespit edilmiş ve kuyruğa başarıyla bu miktarda aktarım yapılmıştır.

4. Prisma groupBy Sıralama & Filtreleme Optimizasyonu

  • Kategori ve Şirket filtre comboları doldurulurken, Prisma'nın groupBy sorgularında take filtresinin sıralama kısıtıılmıştır.
  • Tüm kategori ve şirket filtreleri ürün sayısına göre azalan sırada (en popüler olandan en aza) listelenecek şekilde orderBy optimizasyonuyla güncellenmiştir.

🛠️ Kurulum ve Çalıştırma

1. Gereksinimler

  • Node.js (v18+)
  • MySQL (Varsayılan olarak XAMPP localhost:3306 ve root şifresiz kullanıcısı)

2. Veritabanı Hazırlama

MySQL sunucunuz çalışırken aşağıdaki komut veritabanını ve gerekli tabloları otomatik oluşturur:

npx prisma migrate dev --name init

3. Çalıştırma

Projeyi başlatmak için aşağıdaki komutu çalıştırın:

npm start

Uygulama başlatıldığında adresler.html dosyasını otomatik okuyarak 11,439 eşsiz adresi veritabanı kuyruğuna yükleyecek ve tarama işlemine hazır hale getirecektir.

Web arayüzüne tarayıcınızdan şu adresten ulaşabilirsiniz: 👉 http://localhost:3000


📁 Proje Yapısı

  • prisma/schema.prisma: Veritabanı modelleri (Product ve ScrapeQueue).
  • src/server.js: API yolları, Express sunucusu, istek loglayıcı ve SSE canlı veri yayını.
  • src/scraper.js: HTML okuyucu, asenkron tarayıcı işçileri (in-memory batching) ve sayfa ayıklama mantığı.
  • src/utils.js: Ürün adı miktar & birim temizleme algoritması.
  • public/index.html: Dashboard ve Veritabanı sekmelerinin bulunduğu HTML5 arayüzü (app.js scripti entegre edilmiştir).
  • public/style.css: Glassmorphism ve mikrogiriş animasyonlu modern vanilla CSS.
  • public/app.js: Ön uç dinamik yönetimi, kısa sorgulama yedek mekanizması ve JsBarcode/QRCode.js entegrasyonu.
  • .gitignore: Git takibine alınmaması gereken dosyaların yapılandırılması.

⚙️ Farklı Veritabanlarına Geçiş (Prisma)

Projeyi MySQL'den başka bir veritabanına geçirmek oldukça kolaydır.

SQLite'a Geçiş:

  1. prisma/schema.prisma dosyasındaki provider değerini değiştirin:
    datasource db {
      provider = "sqlite"
      url      = "file:./dev.db"
    }
    
  2. @db.VarChar ve @db.Text gibi veritabanına özel tipleri şemadan kaldırın.
  3. Yeniden migration oluşturun: npx prisma migrate dev --name init_sqlite

PostgreSQL veya SQL Server'a Geçiş:

  1. .env dosyasındaki DATABASE_URL değerini yeni sunucunuza göre düzenleyin.
  2. prisma/schema.prisma dosyasında provider değerini "postgresql" veya "sqlserver" yapın.
  3. npx prisma migrate dev komutunu çalıştırın.
Description
Bu proje, adresler.html dosyasındaki ürün linklerini (barkodist.com) asenkron olarak tarayarak Ürün Adı, Ürün Resmi, Kategorisi, Ait Olduğu Şirket ve Barkod Numarasını ayıklayan ve bunları bir veritabanında toplayan akıllı bir otomasyon sistemidir.
Readme 3 MiB
Languages
JavaScript 56.4%
CSS 24.5%
HTML 19.1%