Podívejme se na časovou složitost pro oba případy:
V ARRAY APPROACH: Tabulka entit s M rows
, s polem položek ACL o size N
(řádky v tabulce ACL zde nejsou relevantní)
ČASOVÁ SLOŽITOST :O[N*log(M)]
PŘIPOJENÍ SE: Tabulka entit s M rows
s tabulkou ACL s N rows
ČASOVÁ SLOŽITOST :O[M + N]
V praxi máme obecně situaci jako,
V POLE
N=10,000
M=1,000,000
O=>60,000
PŘIPOJIT SE
N=10,000
M=1,000,000
O=>1,010,000
A teoreticky by nejhorší scénář pro in array byl
V POLE
N=1,000,000,000
M=1,000,000,000
O=>9,000,000,000
PŘIPOJIT SE
N=1,000,000,000
M=1,000,000,000
O=>2,000,000,000
Co to znamená? Souhrn/TL;DR
Pokud je každému uživateli udělen přístup pouze ke zlomku objektů v entitě, použijte pole IN.
Pokud bude mít každý uživatel záznam ACL pro každý objekt entity, použijte JOIN. I když zisky nebudou o několik řádů (pokud nemáte biliony produktů), možná budete chtít použít pole IN.
V obou případech používejte ACL pouze v nezbytně nutných případech! Voliči FTW!