Prestaties en eenvoud een boost geven met Mendix

Met de introductie van Direct Associations in Mendix hebben ontwikkelaars een krachtig nieuw hulpmiddel om associaties te modelleren. Dit biedt duidelijke voordelen op het gebied van prestaties, database-opslag en eenvoud van het domeinmodel. Traditioneel slaat Mendix associaties op in aparte koppel- (join)tabellen. Dit biedt flexibiliteit, maar kan bij grootschalige applicaties leiden tot prestatieproblemen. Direct Associations veranderen dit door associaties rechtstreeks op te slaan als foreign keys in de databasetabellen — net als bij klassieke relationele modellen.

Waarom Direct Associations belangrijk zijn

Prestatie: Minder join-operaties zorgen voor snellere queries, vooral bij het ophalen van grote datasets of diep geneste associaties.

Opslag: Door het verwijderen van tussenliggende associatietabellen wordt de database eenvoudiger en is er minder opslagruimte nodig.

Eenvoud: Domeinmodellen sluiten nauwer aan op de onderliggende databasestructuur, wat zorgt voor meer duidelijkheid voor ontwikkelaars en databasebeheerders.

Tijd voor een test!

Om de impact te meten, hebben we een eenvoudige testcase opgezet: 1 werknemer met 100.000 gekoppelde assets.

We hebben het traditionele model met een associatietabel vergeleken met het nieuwe Direct Associations-model op drie kernpunten: databasestructuur, SQL-complexiteit en prestaties.

Databasestructuur

Deze visuele vergelijking toont hoe veel eenvoudiger en intuïtiever de database wordt bij gebruik van directe foreign keys in plaats van aparte associatietabellen. Het vermindert de schema-complexiteit en verbetert het onderhoud, vooral naarmate je app groter wordt. Zowel ontwikkelaars als DB-beheerders profiteren van een één-op-één-overeenkomst tussen het Mendix-domeinmodel en het fysieke datamodel.

SQL-complexiteit

Association Table

Direct Association

De SQL die gegenereerd wordt bij traditionele associatietabellen bevat vaak extra joins via een tussenliggende tabel. Dit verhoogt de complexiteit van de query en kan prestaties vertragen, vooral bij grote datasets.

Bij Direct Associations is de gegenereerde SQL schoner en efficiënter. De join wordt vereenvoudigd tot een directe foreign key-referentie. Dit soort queries is gemakkelijker te optimaliseren voor de database-engine, wat leidt tot betere prestaties en snellere reacties.

Show Time!

Use case (n=10) Time (ms)
Association table - retrieve assets over association from employee 558
Direct Association - retrieve asset over association from employee 229

In onze test duurde het ophalen van 100.000 assets via een traditionele associatietabel aanzienlijk langer. De join op de associatietabel voegt overhead toe, die in echte apps met veel gebruikers of veel dataverkeer flink kan oplopen.

Use case (n=10) Time (ms)
Association table - retrieve all assets 412
Direct Association - retrieve all assets 118

Wanneer het Asset-object eigenaar is van de associatie, is de retrieval iets efficiënter – maar nog steeds trager dan bij Direct Associations. De join blijft noodzakelijk. Hoewel retrieval aan de eigenaar-zijde meestal sneller is, vervangt dit niet de optimalisatie die directe foreign keys bieden.

Bonus: 1-1 associaties

1-op-1 associaties zijn al langer een uitdaging, maar laten we eens kijken hoe Direct Associations hiermee omgaan:

Direct Associations vereenvoudigen 1-op-1 relaties aanzienlijk, aangezien de foreign key zich slechts in één tabel bevindt. Maar: heeft dit invloed op het bekende ‘dirty state’-probleem bij 1-op-1 associaties? Daar komen we op terug in een volgende blog…

Laten we ze allemaal omzetten!

Hoewel overstappen naar Direct Associations meestal voordelen biedt, betekent het wijzigen van het associatietype dat de DDL (Data Definition Language) van de database herschreven wordt. Dit kan leiden tot lange migratietijden, zeker als je bestaande tabellen veel rijen bevatten.

Let op: Direct Associations zijn niet beschikbaar voor --associaties (veel-op-veel).

Daarnaast adviseert Mendix om Direct Associations voorlopig niet te gebruiken in modules die bedoeld zijn om in andere apps geïmporteerd te worden (zoals Marketplace-modules), omdat dit onverwachte migraties kan veroorzaken in de app waarin de module wordt geïmporteerd. In deze blog hebben we dat scenario niet getest.

Tot slot

Direct Associations zijn een grote stap voorwaarts in de manier waarop Mendix-apps omgaan met hun onderliggende databases. Werk je met grote hoeveelheden data of complexe modellen? Dan is het de moeite waard om je associaties opnieuw te bekijken en te overwegen of een overstap naar Direct Associations jouw architectuur kan vereenvoudigen en je app kan versnellen.

Wil je het zelf proberen?
Lees meer in de officiële documentatie en laat ons weten wat het effect is op de prestaties van jouw app!

Irena Dzambo & Adnan Calpin-Ramlawi

No items found.
Geschreven door
Adnan
Calpin-Ramlawi
Healthcare Connect