Låt oss titta på tidskomplexiteten för båda fallen:
INTERVÄLJANDE I ORDNING: Entitetstabell med M rows
, med ACL-poster i size N
(rader i ACL-tabellen är inte relevanta här)
TIDSKOMPLEXITET :O[N*log(M)]
GÅ MED ATT GÅ MED: Entitetstabell med M rows
, med ACL-tabell med N rows
TIDSKOMPLEXITET :O[M + N]
I praktiken har vi i allmänhet en situation som,
I MASSOR
N=10,000
M=1,000,000
O=>60,000
GÅ MED
N=10,000
M=1,000,000
O=>1,010,000
Och i teorin skulle det värsta scenariot för in array vara
I MASSOR
N=1,000,000,000
M=1,000,000,000
O=>9,000,000,000
GÅ MED
N=1,000,000,000
M=1,000,000,000
O=>2,000,000,000
Vad betyder detta? Sammanfattning/TL;DR
Om varje användare endast beviljas åtkomst till en bråkdel av objekten i en enhet, använd IN-matris.
Om varje användare kommer att ha en ACL-post för varje objekt i en enhet, använd JOIN. Även om vinsterna inte kommer att vara av flera storleksordningar (såvida du inte har biljoner produkter), så kanske du fortfarande vill använda IN array.
I båda fallen, använd endast ACL när det är absolut nödvändigt! Väljare FTW!