sql >> Database teknologi >  >> RDS >> PostgreSQL

Django Postgres ArrayField vs One-to-Many-forhold

Hvis du bruger et matrixfelt

  • Størrelsen af ​​hver række i din DB vil være en smule stor, så Postgres kommer til at bruge meget flere toast-borde (http://www.postgresql.org/docs/9.5/static/storage-toast.html )
  • Hver gang du får rækken, medmindre du specifikt bruger defer (https://docs.djangoproject.com/en/1.9 /ref/models/querysets/#defer ) feltet eller på anden måde ekskluder det fra forespørgslen via only eller values eller noget, du betaler prisen for at indlæse alle disse værdier, hver gang du itererer på tværs af den række. Hvis det er det, du har brug for, så må det være sådan.
  • Filtrering baseret på værdier i det array, selvom det er muligt, vil ikke være så rart, og Django ORM gør det ikke så indlysende, som det gør for M2M-tabeller.

Hvis du bruger M2M

  • Du kan lettere filtrere efter disse relaterede værdier
  • Disse felter er udskudt som standard, du kan bruge prefetch_related hvis du har brug for dem, og bliv så fancy, hvis du kun vil have en delmængde af disse værdier indlæst
  • Samlet lagerplads i DB vil være lidt højere med M2M på grund af nøgler og ekstra id-felter
  • Omkostningerne ved sammenføjningerne er i dette tilfælde fuldstændig ubetydelige på grund af nøgler.

Personligt vil jeg sige, gå med M2M-tabellerne, men jeg kender ikke din specifikke anvendelse. Hvis du skal arbejde med en enorm mængde data, er det sandsynligvis værd at gribe et repræsentativt datasæt og teste begge metoder med det.




  1. Sådan indstilles en kontekstvariabel for en bruger/forbindelse

  2. Hvordan sletter man modeller fra django?

  3. Låsning af en række i en MYSQL-tabel under en transaktion

  4. Glemt adgangskode script PHP mysqli