Mi történik egy termékmentés után? Az Adobe Commerce a kirakatot nem a forrás-táblákból, hanem előre számolt indexekből szolgálja ki, a külső rendszerekkel pedig üzenetsoron át beszél. Állíts össze egy műveletsort: a szerver PHP-ben, minden kérésnél a nulláról lefuttatja mindkét indexelő-üzemmódban, és lépésenként, időméréssel mutatja, hol tart az adat.
#1
#2
#3
#4
#5
indexer_update_all_views: feldolgozza a változásnaplókat
Hány entity_id-t indexel egyszerre a cron
// Update by Schedule: a mentés csak a forrást írja,
// a trigger a változásnaplóba jegyzi az entity_id-t
$changelog->insert($id); // <indexer>_cl
// cron: indexer_update_all_views
$pending = $changelog->pendingIds($toVersion); // DISTINCT entity_id
foreach (array_chunk($pending, $batchSize) as $batch) {
$indexer->reindexList($store, $batch); // részleges újraindexelés
}
$changelog->setStateVersion($toVersion); // mview_state.version_idAz Adobe Commerce a kategória-oldalt, a keresést és az árakat nem a normalizált (EAV) termék-táblákból számolja minden kérésnél, hanem előre felépített indexekből: ár vevőcsoportonként, készlet-státusz, kategória-termék kapcsolat, keresőindex. Az indexelők feladata, hogy ezeket szinkronban tartsák a forrással.
"Update on Save" módban a mentés maga futtatja le az érintett indexelőket: az index azonnal friss, de minden mentés lassabb, és egy tömeges módosítás (import, csoportos árváltozás) termékenként külön indexelést indít.
"Update by Schedule" módban a feliratkozott táblákon ülő adatbázis-triggerek csak a változásnaplóba (<indexer>_cl) jegyzik az entity_id-t. Az indexer_update_all_views cron-feladat a legutóbb feldolgozott verzió óta érkezett különböző azonosítókat kötegekben indexeli újra (a kötegméret indexelőnként állítható, alapértéke 1000). Ugyanaz a termék háromszor mentve így csak egyszer indexelődik.
Az ára: a mentés és a következő cron-futás között a kirakat még a régi adatot mutatja (a demóban ez a narancs "elavult" jelzés). Sokat importáló, nagy katalógusú áruháznál ennek ellenére az ütemezett mód a bevett választás, rendszeres, egymást át nem fedő cron-futtatással.
A demó tudatosan egyszerűsít: négy indexelő fut a memóriában, és minden mentés az összes feliratkozott indexelőt érinti. A valódi rendszerben az indexek adatbázis-táblák, a keresőindex OpenSearch-ben él, és jóval több indexelő van.
Ez az oldal Google Analytics-et használ a látogatottság méréséhez. Ehhez a hozzájárulásod szükséges - részletek az adatvédelmi tájékoztatóban. Adatvédelmi tájékoztató