Diamo un'occhiata alle complessità temporali per entrambi i casi:
IN APPROCCIO ARRAY: Entity Tabella di M rows
, con un array di voci ACL di size N
(righe nella tabella ACL non pertinenti qui)
COMPLESSITÀ TEMPORALE :A[N*log(M)]
APPROCCIO UNISCITI: Entity Tabella di M rows
, con tabella ACL di N rows
COMPLESSITÀ TEMPORALE :O[M + N]
In pratica generalmente abbiamo una situazione come,
IN ARRAY
N=10,000
M=1,000,000
O=>60,000
ISCRIVITI
N=10,000
M=1,000,000
O=>1,010,000
E in teoria, lo scenario peggiore per in array sarebbe
IN ARRAY
N=1,000,000,000
M=1,000,000,000
O=>9,000,000,000
ISCRIVITI
N=1,000,000,000
M=1,000,000,000
O=>2,000,000,000
Cosa significa? Riepilogo/TL;DR
Se a ciascun Utente viene concesso l'accesso solo a una frazione degli oggetti in un'entità, utilizzare l'array IN.
Se ogni Utente avrà una voce ACL per ogni Oggetto di un'Entità, usa JOIN. Anche se i guadagni non saranno di diversi ordini di grandezza (a meno che tu non abbia trilioni di prodotti), potresti comunque voler utilizzare l'array IN.
In entrambi i casi, utilizzare ACL solo quando strettamente necessario! Elettori FTW!