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!