E-commerce · Comparație

DeBuget — comparator de prețuri cu 750.000 de produse și feed-uri zilnice din 70+ magazine

DeBuget.ro compară prețurile a peste 750.000 de produse din 70+ magazine online românești. Provocarea tehnică: ingest de feed-uri zilnice (milioane de rânduri), căutare full-text sub 200ms, pagini de produs care se încarcă sub 1s LCP, totul pe infrastructură cu cost lunar sub €100.

IndustrieE-commerce / Price Comparison
Durată6 luni
StatusLive · crawler activ zilnic
Echipă2 dezvoltatori
ȚarăRomânia

Contextul de business

Modelul comparatorului de prețuri (compari.ro, price.ro) există în România din 2000, dar majoritatea platformelor au infrastructură veche: pagini lente (LCP 3-5s), căutare greoaie, date stocate o săptămână. DeBuget trebuia să rezolve trei probleme: (1) ingest a 70+ feed-uri în formaturi diferite (CSV, XML, JSON, uneori HTML crawling), (2) deduplicare inteligentă — același produs listat de 5 magazine sub nume ușor diferite, (3) viteză pe mobil unde 80% din trafic vine.

Constrângerea reală: budget de infrastructură de €80-100/lună. Nu AWS, nu Google Cloud. Un VPS Hetzner cu MariaDB și Docker. Fiecare decizie de arhitectură trebuia să se încadreze în acel buget, inclusiv crawling-ul zilnic care procesează 2-3 milioane de rânduri.

debuget.ro/cauta/iphone-15 iPhone 15 Pro 128GB Caută iPhone 15 Pro 128GB Titanium 4.899 RON eMAG iPhone 15 Pro 128GB Natural 5.199 RON Cel.ro iPhone 15 Pro 128GB Blue 5.499 RON QuickMobile ↑ Economisești 600 RON (12%)
Pagină rezultat căutare — design ilustrativ

Decizii tehnice cheie

1. MariaDB + indici compuși pentru query-uri de comparație

Am ales MariaDB în loc de PostgreSQL pentru cost: MariaDB pe Hetzner VPS cu 16GB RAM poate procesa query-uri de comparație pe 750K produse sub 100ms cu indici compuși corect construiți. Index-ul cheie: (category_id, is_active, offer_count) — permite filtrarea pe categorie cu produse care au oferte active într-un singur index scan.

2. Deduplicare prin hash produs + fuzzy matching

Același produs apare sub 5 nume diferite în feed-uri. Prima etapă: hash normalizat (brand + model + capacitate) pentru potrivire exactă. A doua etapă: algoritm Levenshtein pe nume normalizate pentru potrivire aproximativă. Rata de deduplicare: 92% automat, 8% verificare manuală prin dashboard admin.

3. Crawler async cu Celery + rate limiting per magazin

Ingest-ul zilnic rulează pe Celery workers cu rate limiting per magazin (respectăm robots.txt și nu trimitem mai mult de 1 request/secundă per domeniu). Feed-urile complete (CSV/XML) se descarcă o dată pe zi la 2AM. Update-uri de preț incremental la fiecare 4 ore pentru top 1000 produse (cele mai căutate). Timp total ingest: 3-4 ore pe VPS.

Python Django MariaDB Celery Redis Docker Nginx Hetzner VPS Cloudflare

Provocări întâlnite

Provocarea 1: Feed-uri cu formaturi invalide

Aproximativ 15% din feed-uri aveau formaturi invalide: coloane lipsă, encoding greșit (Windows-1252 în loc de UTF-8), prețuri cu virgulă în loc de punct. Soluție: layer de normalizare care detectează encoding-ul automat (chardet), parse defensiv cu fallback la coloane după poziție, și alertare automată când un feed nu parsează corect 2 zile la rând.

Provocarea 2: Căutare full-text pe 750K produse sub 200ms

MariaDB FULLTEXT index pe câmpurile de căutare era lent (400-800ms) pentru cuvinte parțiale. Soluție: Meilisearch ca layer de căutare — index sincronizat din MariaDB la fiecare ingest, căutare instantă sub 50ms. Meilisearch rulează în container Docker pe același VPS, consumă sub 2GB RAM.

Provocarea 3: Afiliere 2Performant cu tracking conversii

Monetizarea principală e afilierea prin 2Performant. Provocarea: link-urile de afiliere trebuie să trackeze și conversia pe server (nu cookie-only), pentru că mulți utilizatori au ad-blockere. Soluție: redirect server-side prin endpoint /go/{product_id} care înregistrează click-ul în DB înainte de redirect. Conversia se confirmă prin postback de la 2Performant.

Rezultate măsurate

750K+Produse indexate din 70+ magazine
<200msTimp mediu căutare (Meilisearch)
0.8sLCP mediu pe mobil (Lighthouse 98)
€85Cost infrastructură lunar (VPS + CF)
3-4hTimp ingest zilnic complet
92%Rată deduplicare automată

Lecții pentru proiecte similare

  1. MariaDB + indici compuși bat PostgreSQL pe cost pentru workload-uri de comparație cu peste 500K rânduri pe un singur VPS. Rezervă PostgreSQL pentru proiecte cu query-uri complexe OLAP.
  2. Meilisearch ca layer de căutare elimină problema full-text pe baze mari. Sub 50ms pentru 750K produse, setup în Docker în 10 minute.
  3. Crawling cu rate limiting per domeniu respectă robots.txt și menține relații bune cu magazinele partenere. Fără rate limiting → IP ban → date învechite.
  4. Deduplicarea e 80% din valoarea unui comparator. Fără deduplicare, utilizatorul vede același produs de 5 ori și pierde încrederea.
  5. Afiliere server-side tracking supraviețuiește ad-blocker-elor. Cookie-only = 30-40% pierdere conversie în 2026.

«DeBuget a crescut de la 0 la 750.000 de produse indexate în 6 luni, pe o infrastructură de sub €100/lună. Faintech a ales stack-ul potrivit pentru constrângerea noastră de buget, fără să sacrifice viteză.» — Eduard Gridan, founder DeBuget

Ai un proiect similar?

Discovery scris în 48h cu specificație tehnică detaliată. Plus calcul ROI pe stack alternativ.

Discută proiectul

Citește în continuare