sql >> Database >  >> RDS >> PostgreSQL

Django Postgres ArrayField versus een-op-veel-relatie

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 via only , of values 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.




  1. python mysqldb fout op mijn mac :Bibliotheek niet geladen:@rpath/libmysqlclient.21.dylib

  2. Resultaten van de ene MySQL-query gebruiken in een andere query in een PHP-omgeving

  3. Een Pandas-dataframe schrijven naar MySQL

  4. Retourneer standaardresultaat voor IN-waarde, ongeacht