Verschillende programmeertalen pakken dit probleem op verschillende manieren aan, omdat ze allemaal proberen de efficiëntie te maximaliseren of de hoeveelheid gebruikte schijfruimte te minimaliseren. De manier waarop velden zijn georganiseerd is net zo belangrijk als de zoekmethode.
Een binaire zoekopdracht is bijvoorbeeld veel sneller dan een lineaire zoekopdracht. Een binaire zoekopdracht kan echter alleen worden uitgevoerd op een reeds gesorteerd veld met bloktoegang.
Hoewel indexering complex lijkt, en dat ook daadwerkelijk is, heb je niet veel programmeerervaring nodig om het te begrijpen als je Magento gebruikt. Hier volgt een overzicht van hoe Magento PHP-indexering aanpakt.
Ingebouwde Magento-indexering
Magento gebruikt 10 indexers om gegevens van producten of categorieën te transformeren. Hoewel dit voldoende is voor de meeste basis e-commerce websites, kunt u met de applicatie ook uw eigen aangepaste indexers maken.
Omdat Magento-indexering niet is geoptimaliseerd voor elke mogelijke situatie, kan het nodig zijn om de standaardlijst met indexers aan te vullen met uw eigen indexers. Vooral wanneer u een website zodanig aanpast dat er tijdens updates geavanceerde zoekopdrachten nodig zijn.
Componenten die betrokken zijn bij indexering
1. Magento_indexer
Deze component is verantwoordelijk voor het uitvoeren van de volgende acties: declaratie van indexers, status van indexers, status van indexers (actief), configuratie van de modus voor indexers.
2. Magento\Framework\Mview
De Mview-component is vergelijkbaar met de "materialized view" van MySQL. In het geval van Magento resulteert deze functie echter in het uitvoeren van PHP-code. Dit verschilt van SQL-queryʼs omdat het meerdere queryʼs tegelijkertijd mogelijk maakt.
Indexering in Magento
Zoals eerder vermeld, is er een component die Magento-indexering vrijwel gelijk maakt aan indexering op databaseniveau in MySQL. Magento is echter veelzijdiger en aanpasbaarder als het gaat om indexering.
Standaard objectindexering wordt normaal gesproken uitgevoerd op een grote tabel die catalogusproducten of categorieën opslaat. Dit is over het algemeen een snelle manier om zoekopdrachten uit te voeren, maar er is een oud probleem om rekening mee te houden: het toevoegen van nieuwe attributen.
Attributen kunnen van alles zijn, van een kortingsprijs of een kleur tot het toevoegen van een leeftijdsbereik voor bepaald speelgoed of kleding. De gebruikelijke manier om dit te doen is door een nieuwe kolom aan de tabel toe te voegen. Maar wat als slechts een handvol producten dat nieuwe attribuut heeft? Hoe kun je dan onderhoud uitvoeren zonder de website te vertragen?
Magento lost dit probleem op door de klassieke tabel op te splitsen in kleinere eenheden die gemakkelijker te categoriseren zijn. Deze flexibiliteit stelt verkopers en websitebeheerders in staat productcategorieën en -typen beter te definiëren.
Om de prestaties verder te verbeteren, gebruikt Magento nog een slimme truc. Dit werkt als je ervan uitgaat dat alle attributen duidelijk zijn gedefinieerd en er een complete, grote tabel is gegenereerd.
Hierdoor kan Magentoʼs indexering de hele tabel bij elke wijziging opnieuw aanmaken. Kort gezegd, wanneer een attribuut verandert, bijvoorbeeld de prijs van een T-shirt, wordt de oude tabel met die informatie gewist en opnieuw gegenereerd met de nieuwe waarde. Al het andere blijft intact.
Uiteindelijk voorkomt dit dat er onnodig resources worden verspild aan het zoeken in meerdere categorieën.
Hoe Magento herindexering activeert
Op basis van de indexeringsstatus en de indexeringsmodus wordt het indexeringsmechanisme geactiveerd wanneer dat nodig is. De waarde van een indexeringsstatus kan een van de volgende zijn:
1. Geldig
Dit betekent dat er geen herindexering nodig is. De status "geldig" verschijnt wanneer de gegevens zijn gesynchroniseerd.
2. Ongeldig
Dit betekent dat de index moet worden bijgewerkt omdat de oorspronkelijke gegevens zijn gewijzigd.
3. Bezig
Dit betekent dat het indexeren al bezig is.
Magento kan op twee manieren of in twee modi het herindexeren afhandelen. Je kunt kiezen tussen "Bijwerken bij opslaan" en "Bijwerken volgens schema".
De eerste optie kan de browse-ervaring iets trager maken, maar het is de beste manier om ervoor te zorgen dat alles up-to-date is. Het geplande herindexeren gebeurt via een cronjob. Dit is de standaard PHP-methode voor het maken en uitvoeren van verschillende terugkerende of geplande taken.
Beide opties moeten handmatig worden ingesteld om Magento actie te laten ondernemen. Dit kan via de commandoregel, maar ook via het beheerderspaneel.
- Ga naar Magento-beheer
- Selecteer systeem
- Selecteer indexbeheer
- Vink de selectievakjes aan voor de indexeerders die door de updates moeten worden beïnvloed
- Ga naar de actielijst
- Selecteer de indexeringsmodus
- Klik op verzenden
De beste manier om te indexeren in Magento
Of u nu een kleine webwinkel of een grote e-commercewebsite beheert, handmatig indexeren wordt nog steeds aanbevolen. Het Magento-platform is zeer aanpasbaar, maar het is niet het snelste als het gaat om het uitvoeren van grote updates.
Een veelvoorkomend probleem met PHP-gebaseerde indexering is dat grote updates te lang kunnen duren. Als het proces te lang duurt, kan het script abrupt stoppen. Dit leidt vaak tot gegevenscorruptie en uiteraard zal de prestatie van uw website daar ook onder lijden.
Handmatig indexeren biedt u één belangrijk voordeel: u kunt een tijdstip kiezen waarop het websiteverkeer lager is. Dit betekent dat u de gebruikerservaring van uw potentiële klanten niet verstoort.
U kunt er ook voor kiezen om een update over twee dagen of twee specifieke tijdsperioden te verdelen wanneer de verkeersactiviteit het laagst is. Dit kan de kans dat het PHP-script vastloopt en uw gegevens corrumpeert aanzienlijk verkleinen.
Tot slot
Hoewel Magento niet het snelste indexeringsproces heeft, hebben updates van de code in de afgelopen jaren dit zeker verbeterd. Magento is niet meer zo traag als vroeger en biedt nog steeds een flexibiliteit die enigszins beter is dan die van klassieke MySQL-indexering.
Er zijn echter nog steeds enkele nadelen wat betreft automatische updates en je moet nog steeds al je attributen aan de tabel toevoegen voordat je deze genereert. Het is zeker niet verplicht, maar de extra tijd en moeite die je er vooraf in steekt, bespaart je veel tijd en middelen bij het herindexeren van je webwinkel.



