Нека да разгледаме сложността на времето и за двата случая:
В ПОДХОД НА МАСИВ: Таблица с обекти от M rows
, с масив от ACL записи с size N
(редовете в ACL таблицата не са от значение тук)
ВРЕМЕВА СЛОЖНОСТ :O[N*log(M)]
ПРИСЪЕДИНЕТЕ СЕ КЪМ ПОДХОДА: Таблица с обекти от M rows
, с ACL таблица от N rows
ВРЕМЕВА СЛОЖНОСТ :O[M + N]
На практика обикновено имаме ситуация като,
В МАСИВ
N=10,000
M=1,000,000
O=>60,000
ПРИСЪЕДИНЕТЕ СЕ
N=10,000
M=1,000,000
O=>1,010,000
И на теория най-лошият сценарий за in array би бил
В МАСИВ
N=1,000,000,000
M=1,000,000,000
O=>9,000,000,000
ПРИСЪЕДИНЕТЕ СЕ
N=1,000,000,000
M=1,000,000,000
O=>2,000,000,000
Какво означава това? Резюме/TL;DR
Ако на всеки потребител е предоставен достъп само до част от обектите в даден обект, използвайте IN масив.
Ако всеки потребител ще има ACL запис за всеки обект на обект, използвайте JOIN. Въпреки че печалбите няма да са от няколко порядъка (освен ако нямате трилиони продукти), така че все пак може да искате да използвате IN масив.
И в двата случая използвайте ACL само когато е абсолютно необходимо! Гласоподаватели FTW!