Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist es bei Verwendung der ACL von Symfony besser, eine JOIN-Abfrage oder eine IN-Array-Abfrage zu verwenden?

Sehen wir uns die zeitliche Komplexität für beide Fälle an:

IN ARRAY-ANFAHRT: Entitätstabelle mit M rows , mit einem ACL-Eintragsarray von size N (Zeilen in der ACL-Tabelle hier nicht relevant)

ZEITKOMPLEXITÄT :O[N*log(M)]

JOIN-ANSATZ: Entitätstabelle mit M rows , mit ACL-Tabelle von N rows

ZEITKOMPLEXITÄT :O[M + N]

In der Praxis haben wir im Allgemeinen eine Situation wie,

IN ARRAY

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

MITGLIED

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

Und theoretisch wäre das Worst-Case-Szenario für In-Array

IN ARRAY

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

MITGLIED

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

Was bedeutet das? Zusammenfassung/TL;DR

Wenn jedem Benutzer nur Zugriff auf einen Bruchteil der Objekte in einer Entität gewährt wird, verwenden Sie das IN-Array.

Wenn jeder Benutzer einen ACL-Eintrag für jedes Objekt einer Entität haben wird, verwenden Sie JOIN. Obwohl die Gewinne nicht mehrere Größenordnungen betragen werden (es sei denn, Sie haben Billionen von Produkten), sollten Sie dennoch das IN-Array verwenden.

Verwenden Sie ACL in beiden Fällen nur, wenn es absolut notwendig ist! Wähler FTW!