Mysql
 sql >> Database >  >> RDS >> Mysql

Quando si usa l'ACL di Symfony, è meglio usare una query JOIN o una query di array IN?

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!