Als u een matrixveld gebruikt
- De grootte van elke rij in je DB zal een beetje groot zijn, dus Postgres gaat veel meer toast-tabellen gebruiken (http://www.postgresql.org/docs/9.5/static/storage-toast.html )
- Elke keer dat je de rij krijgt, tenzij je specifiek
defer
gebruikt (https://docs.djangoproject.com/en/1.9 /ref/models/querysets/#defer ) het veld of sluit het op een andere manier uit van de zoekopdracht viaonly
, ofvalues
of zoiets, je betaalt de kosten van het laden van al die waarden elke keer dat je over die rij heen gaat. Als dat is wat je nodig hebt, dan zij het zo. - Filteren op basis van waarden in die array, hoewel mogelijk, zal niet zo mooi zijn en de Django ORM maakt het niet zo duidelijk als voor M2M-tabellen.
Als u M2M gebruikt
- U kunt gemakkelijker filteren op die gerelateerde waarden
- Deze velden zijn standaard uitgesteld, u kunt
prefetch_related
. gebruiken als je ze nodig hebt en krijg dan zin als je alleen een subset van die waarden wilt laden - De totale opslag in de DB zal iets hoger zijn met M2M vanwege sleutels en extra id-velden
- De kosten van de joins zijn in dit geval volledig te verwaarlozen vanwege de sleutels.
Persoonlijk zou ik zeggen:ga voor de M2M-tabellen, maar ik ken uw specifieke toepassing niet. Als je met een enorme hoeveelheid gegevens gaat werken, is het waarschijnlijk de moeite waard om een representatieve dataset te pakken en beide methoden ermee te testen.