Mysql
 sql >> Base de données >  >> RDS >> Mysql

Lors de l'utilisation de l'ACL de Symfony, est-il préférable d'utiliser une requête JOIN ou une requête de tableau IN ?

Examinons les complexités temporelles pour les deux cas :

APPROCHE EN TABLEAU : Table d'entités de M rows , avec un tableau d'entrées ACL de size N (les lignes de la table ACL ne sont pas pertinentes ici)

COMPLEXITÉ TEMPORELLE :O[N*log(M)]

JOIGNEZ-VOUS À L'APPROCHE : Table d'entités de M rows , avec table ACL de N rows

COMPLEXITÉ TEMPORELLE :O[M + N]

En pratique, nous avons généralement une situation comme,

EN TABLEAU

N=10,000
M=1,000,000
O=>60,000

JOIGNEZ-VOUS

N=10,000
M=1,000,000
O=>1,010,000

Et en théorie, le pire scénario pour in array serait

EN TABLEAU

N=1,000,000,000
M=1,000,000,000
O=>9,000,000,000

JOIGNEZ-VOUS

N=1,000,000,000
M=1,000,000,000
O=>2,000,000,000

Qu'est-ce que cela signifie ? Résumé/TL;DR

Si chaque utilisateur n'a accès qu'à une fraction des objets d'une entité, utilisez le tableau IN.

Si chaque utilisateur a une entrée ACL pour chaque objet d'une entité, utilisez JOIN. Bien que les gains ne soient pas de plusieurs ordres de grandeur (sauf si vous avez des billions de produits), vous voudrez peut-être toujours utiliser le tableau IN.

Dans les deux cas, n'utilisez ACL qu'en cas d'absolue nécessité ! Électeurs FTW !