Preskoči na sadržaj

Kolačići

Googleovi kolačići za mjerenje i oglase? Privatnost

Scale Lab 2026: koliko brzo radi e-commerce baza s 10.000 do 5.000.000 artikala

Na sintetičkom katalogu od 5.000.000 artikala stranica proizvoda dolazi iz baze za 0,715 ms, prva stranica kategorije za 0,858 ms, a B2B cijena po kupcu za 24 artikla za 0,923 ms (medijani), gotovo jednako kao s 10.000 artikala (stranica proizvoda 0,687 ms).

Duboka paginacija keyset metodom na ~2000. stranici traje 0,691 ms, a ista stranica preko OFFSET-a 40,294 ms, oko 58× sporije.

Granica se pojavljuje kod brojača faceta: 102,491 ms medijan na 5.000.000 artikala s ovom shemom, što je točka na kojoj veličina kataloga postaje arhitektonska odluka.

Scale Lab 2026: sintetički katalog, PostgreSQL 16 u Docker Desktopu (WSL2) na jednom i7-13700K, jedan klijent na istom računalu, zagrijan cache, 24. rujna 2026. Mjereno je samo vrijeme upita do baze, bez učitavanja stranice. Bez usporedbe s drugim platformama.

Autor Filip Lukovnjak, osnivač i inženjerObjavljeno 24. rujna 2026.

Veličine kataloga
10.000 · 100.000 · 1.000.000 · 5.000.000
Mjerenja
300 po upitu i veličini
Izmjereno
24. rujna 2026.
Licenca podataka
CC BY 4.0

01Ključni nalazi

Što raste s katalogom, a što ne

Svaka brojka ispod dolazi iz datoteke results.json, a uz nju stoji uvjet pod kojim vrijedi.

  1. Stranica proizvoda · 5.000.000 artikala

    medijan; 0,687 ms kod 10.000 artikala

    0,715 ms

  2. Prva stranica kategorije (24 artikla) · 5.000.000 artikala

    medijan; ispod 1 ms na svim veličinama do 5 milijuna

    0,858 ms

  3. B2B cijena po kupcu za 24 artikla · 5.000.000 artikala

    medijan

    0,923 ms

  4. Stranica ~2000 · 5.000.000 artikala

    keyset paginacija vs OFFSET, medijan — oko 58× brže; iste retke provjerili smo na stranici ~200

    0,691 ms vs 40,294 ms

  5. Filtri, facete i pretraga · do 1.000.000 artikala

    medijan (najsporije: brojanje faceta, 18,647 ms); p95 do 38,6 ms

    ispod 20 ms

  6. Brojanje faceta · 5.000.000 artikala

    medijan (p95 236,328 ms) s ovom shemom — ovdje veličina kataloga postaje arhitektonska odluka; optimizacije u testu nisu primijenjene

    102,491 ms

  7. 1.000 izmjena cijena i zaliha u jednoj transakciji · 1.000.000 artikala

    medijan, oko 26.000 redaka/s; 20 serija; trošak ne raste ravnomjerno s veličinom kataloga

    38,27 ms

  8. 5.000.000 artikala generirano, indeksirano i analizirano

    podaci generirani u bazi, bez uvoza iz ERP-a; oko 2,9 GB s indeksima

    130,73 s

Uvjeti mjerenjaScale Lab 2026: sintetički katalog, PostgreSQL 16 u Docker Desktopu (WSL2) na jednom i7-13700K, jedan klijent na istom računalu, zagrijan cache, 24. rujna 2026. Mjereno je samo vrijeme upita do baze, bez učitavanja stranice. Bez usporedbe s drugim platformama.

02Rezultati

Sve veličine, svi upiti

Graf prikazuje medijan za četiri reprezentativna upita. Tablice ispod sadrže p50 i p95 za svaki upit i svaku veličinu, učitane iz podataka pri izradi stranice.

  • Stranica proizvoda
  • Kategorija, 1. stranica
  • Paginacija ~str. 200 (keyset)
  • Brojači faceta
Medijan latencije upita (p50) prema veličini katalogaLogaritamske osi. Stranica proizvoda: 10.000 artikala 0,687 ms, 100.000 artikala 0,706 ms, 1.000.000 artikala 0,681 ms, 5.000.000 artikala 0,715 ms. Kategorija, 1. stranica: 10.000 artikala 0,706 ms, 100.000 artikala 0,709 ms, 1.000.000 artikala 0,759 ms, 5.000.000 artikala 0,858 ms. Paginacija ~str. 200 (keyset): 10.000 artikala 0,645 ms, 100.000 artikala 0,589 ms, 1.000.000 artikala 0,72 ms, 5.000.000 artikala 0,69 ms. Brojači faceta: 10.000 artikala 1,233 ms, 100.000 artikala 2,644 ms, 1.000.000 artikala 18,647 ms, 5.000.000 artikala 102,491 ms.0,515105010010.000100.0001.000.0005.000.000Broj artikala u katalogu (log)p50 latencija, ms (log)Stranica proizvoda, 10.000 artikala: 0,687 ms (p50)Stranica proizvoda, 100.000 artikala: 0,706 ms (p50)Stranica proizvoda, 1.000.000 artikala: 0,681 ms (p50)Stranica proizvoda, 5.000.000 artikala: 0,715 ms (p50)Kategorija, 1. stranica, 10.000 artikala: 0,706 ms (p50)Kategorija, 1. stranica, 100.000 artikala: 0,709 ms (p50)Kategorija, 1. stranica, 1.000.000 artikala: 0,759 ms (p50)Kategorija, 1. stranica, 5.000.000 artikala: 0,858 ms (p50)Paginacija ~str. 200 (keyset), 10.000 artikala: 0,645 ms (p50)Paginacija ~str. 200 (keyset), 100.000 artikala: 0,589 ms (p50)Paginacija ~str. 200 (keyset), 1.000.000 artikala: 0,72 ms (p50)Paginacija ~str. 200 (keyset), 5.000.000 artikala: 0,69 ms (p50)Brojači faceta, 10.000 artikala: 1,233 ms (p50)Brojači faceta, 100.000 artikala: 2,644 ms (p50)Brojači faceta, 1.000.000 artikala: 18,647 ms (p50)Brojači faceta, 5.000.000 artikala: 102,491 ms (p50)Brojači faceta102,491 msProizvod, kategorija,keyset: ispod 1 ms
Medijan (p50) od 300 mjerenja po upitu i veličini. Točne vrijednosti su u tablici ispod i u results.json. Scale Lab 2026: sintetički katalog, PostgreSQL 16 u Docker Desktopu (WSL2) na jednom i7-13700K, jedan klijent na istom računalu, zagrijan cache, 24. rujna 2026. Mjereno je samo vrijeme upita do baze, bez učitavanja stranice. Bez usporedbe s drugim platformama.
Upiti za čitanje: latencija u ms, p50 / p95. 300 mjerenih iteracija po upitu nakon 20 zagrijavanja. „n/p” = premalo aktivnih artikala za tu dubinu stranice.
Upit10.000100.0001.000.0005.000.000
Q0 · SELECT 1 — donja granica mreže i drivera0,537 / 0,820,417 / 0,5720,402 / 0,5760,466 / 0,658
Q1 · Stranica proizvoda (slug + brend + kategorija)0,687 / 0,9980,706 / 1,1760,681 / 0,9870,715 / 1,019
Q2 · Kategorija, 1. stranica (24 artikla, po popularnosti)0,706 / 1,0030,709 / 1,0340,759 / 1,0980,858 / 1,218
Q3 · Paginacija ~str. 200, keyset0,645 / 1,0590,589 / 0,8150,72 / 1,0720,69 / 0,973
Q3 · Paginacija ~str. 200, OFFSET (antiobrazac)1,672 / 3,2922,373 / 3,4154,143 / 5,5014,773 / 6,318
Q3 · Paginacija ~str. 2000, keysetn/p0,558 / 0,7740,569 / 0,7620,691 / 0,984
Q3 · Paginacija ~str. 2000, OFFSET (antiobrazac)n/p16,311 / 27,30531,464 / 42,72840,294 / 50,592
Q4 · Filtriranje: podstablo, brendovi, cijena, zaliha, boja0,826 / 1,1341,24 / 2,8965,989 / 33,39116,046 / 164,03
Q5 · Brojači faceta (top 20 brendova)1,233 / 1,7492,644 / 5,73918,647 / 38,606102,491 / 236,328
Q6 · Pretraga, poredak po ts_rank0,835 / 1,4680,951 / 2,622,684 / 21,72112,558 / 215,22
Q6 · Pretraga, poredak po popularnosti0,822 / 1,3540,943 / 3,9642,307 / 32,3764,253 / 81,232
Q6 · Broj rezultata pretrage, ograničen na „1000+”0,644 / 1,0610,801 / 1,5282,506 / 4,8627,576 / 32,24
Q7 · B2B cijene (24 artikla × grupa kupca)0,639 / 0,8850,694 / 0,9440,741 / 1,0490,923 / 1,28
Sinkronizacija i početno učitavanje. Q8: 20 mjerenih paketa od 1.000 izmjena cijene i zalihe u jednoj transakciji.
Upit10.000100.0001.000.0005.000.000
Q8 · paket izmjena, p50 / p95 (ms)32,833 / 40,70252,073 / 59,88438,27 / 48,606109,345 / 137,335
Q8 · od toga UPDATE p50 / COMMIT p50 (ms)23,564 / 7,64843,917 / 7,60930,56 / 7,05455,72 / 52,895
Q8 · redaka u sekundi (pri p50)30.45719.20426.1309.145
Q9 · početni unos, artikala u sekundi68.49375.81571.19063.741
Ukupno učitavanje (s)0,7442,9421,195130,73
Baza s indeksima (MiB)6,857,8558,42.771,6

03Objašnjenje

Zašto su neki upiti ravni, a neki rastu

Indeks pogađa točno ono što stranica traži. Stranica proizvoda traži jedan redak po jedinstvenom slugu, prva stranica kategorije čita 24 retka iz indeksa koji je već složen po kategoriji i popularnosti, a B2B cijena dolazi jednim dohvatom po paru (grupa kupca, artikl). Posao ne ovisi o tome koliko je ostalih artikala u bazi, pa je razlika između 10.000 i 5.000.000 artikala najviše 0,284 ms medijana. Veći dio izmjerenog vremena je sam povratni put do baze (SELECT 1: 0,466 ms).

OFFSET plaća svaki preskočeni redak. Da bi došao do ~2000. stranice, OFFSET mora pročitati i odbaciti desetke tisuća redaka. Keyset paginacija nastavlja od zadnjeg viđenog para (popularnost, id) izravno u indeksu. Na 5.000.000 artikala to je 40,294 ms naspram 0,691 ms, oko 58×. Da keyset vraća iste retke kao OFFSET, provjerili smo na ~200. stranici za svaku veličinu.

Facete broje, a brojanje raste s podacima. Brojači faceta moraju proći kroz sve artikle koji odgovaraju filtru. Na 1.000.000 artikala to je 18,647 ms, a na 5.000.000 102,491 ms medijan jer česta boja u GIN indeksu atributa pogađa stotine tisuća redaka. S ovom shemom to više nije dovoljno za interaktivni filtar.

Kako bismo to riješili u stvarnom projektu

Ovo su inženjerske opcije, ne izmjereni rezultati. Nijedna nije primijenjena u ovom mjerenju.

  1. Najčešće facete u zasebne stupce

    Boja, veličina ili materijal kao tipizirani stupci sa složenim indeksom umjesto pretrage po jsonb atributima.

  2. Unaprijed izračunati brojači

    Agregati po kategoriji i vrijednosti atributa, osvježeni pri izmjeni kataloga, pa filtar čita gotov broj.

  3. Zaseban pretraživač

    Za vrlo velike kataloge facete i pretragu preuzima namjenski indeks za pretraživanje, a baza ostaje izvor istine.

04Metodologija

Kako smo mjerili i što nismo

Cijeli postupak opisan je u METHODOLOGY.md. Ovo je sažetak onoga što treba znati prije citiranja bilo koje brojke.

Računalo
Intel Core i7-13700K, 16 fizičkih / 24 logičke jezgre
Baza
PostgreSQL 16 u Docker Desktopu (WSL2), zadane postavke uz shared_buffers 1 GB i work_mem 32 MB
Klijent
Jedna veza (node-postgres) na istom računalu, upiti jedan za drugim, preko 127.0.0.1
Ponavljanja
20 zagrijavanja + 300 mjerenja po upitu; sinkronizacija 20 mjerenih paketa
Parametri
Izvučeni iz stvarno učitanih podataka generatorom sa sjemenom (40 kursora, 100 kombinacija filtra, do 400 pojmova)
Podaci
Sintetički i deterministički katalog; 5.000.000 artikala zauzima 2.771,6 MiB s indeksima

Što nije izmjereno

Podaci i planovi upita

Kod mjerenja (schema.sql, generate.sql, indexes.sql, run.mjs) nalazi se u mapi scripts/scale-lab našeg repozitorija. METHODOLOGY.md opisuje svaki korak i naredbe za ponavljanje; kod šaljemo na upit. Pravila objave i ispravaka opisana su u uredničkoj politici.

Kako citirati
FIN STUDIO (2026). Scale Lab 2026: koliko brzo radi e-commerce baza s 10.000 do 5.000.000 artikala. Izmjereno 24. rujna 2026. CC BY 4.0. https://finstudio.hr/istrazivanje/skaliranje-kataloga-2026

05Za vaš webshop

Što to znači za vaš webshop

Veličinu kataloga određuje arhitektura sustava. Stranica proizvoda, kategorija i B2B cijene ostaju brze i na milijunima artikala ako su indeksi projektirani oko stvarnih upita. Filtri, facete i pretraga traže odluku ranije: koje atribute izdvojiti, što unaprijed izračunati i kada uvesti pretraživač.

Zato ne prodajemo pakete s limitom artikala. Gradimo po vašem poslovanju: od velikog kataloga s više izvora podataka do feedova dobavljača i cjenika po kupcu.

Pitanja o Scale Labu

Koliko artikala može imati custom webshop?

Unaprijed zadane granice nema: veličinu kataloga određuje arhitektura sustava. U Scale Labu smo izmjerili istu PostgreSQL shemu na 10.000, 100.000, 1.000.000 i 5.000.000 artikala. Stranica proizvoda, kategorija i B2B cijene ostale su ispod 1 ms medijana na svim veličinama, ali brojači faceta na 5.000.000 artikala trebaju drukčiji dizajn (102,491 ms medijan s testiranom shemom).

Znači li to da se stranica webshopa učitava za 1 milisekundu?

Ne. Mjereno je samo vrijeme upita do baze, s klijentom na istom računalu i zagrijanom predmemorijom. Stvarni posjetitelj vidi i mrežu, TLS, CDN, renderiranje, slike i JavaScript. Brojke pokazuju kako trošak upita raste s veličinom kataloga, a ne brzinu stranice.

Je li ovo usporedba s WooCommerceom, Shopifyjem ili Magentom?

Nije. Nismo mjerili nijednu drugu platformu i brojke se ne smiju čitati kao usporedba. Mjerena je jedna PostgreSQL shema s jasno opisanim indeksima, na jednom računalu.

Zašto OFFSET paginacija usporava na velikim katalozima?

OFFSET mora pročitati i odbaciti sve retke prije tražene stranice, pa trošak raste s dubinom stranice i veličinom kataloga. Keyset paginacija nastavlja od zadnjeg viđenog para (popularnost, id) po indeksu. Na 5.000.000 artikala i ~2000. stranici izmjerili smo 40,294 ms za OFFSET i 0,691 ms za keyset (medijani).

Koliko brzo se mogu sinkronizirati cijene i zalihe?

Paket od 1.000 izmjena cijene i zalihe u jednoj transakciji trajao je 38,27 ms medijan na 1.000.000 artikala. To mjeri samo bazu; stvarni uvoz iz ERP-a ili feeda dobavljača obično ograničavaju parsiranje i mreža. Q8 ne raste ravnomjerno s veličinom kataloga; objašnjenje je u metodologiji.

Smijem li koristiti podatke Scale Laba?

Da. Podaci su objavljeni pod licencom CC BY 4.0: slobodno ih koristite, prerađujte i citirajte uz navođenje izvora „FIN STUDIO, Scale Lab 2026”, s poveznicom na ovu stranicu.

Razgovarate s osobom koja gradi vaš sustav.

Pošaljite veličinu kataloga, izvore podataka (ERP, dobavljači, PIM) i kako kupci filtriraju. Odgovara inženjer koji projektira i gradi sustav, bez posrednika.

Odgovor unutar 24 sata radnim danom.