Hãy xem xét sự phức tạp về thời gian cho cả hai trường hợp:
TRONG CÁCH TIẾP CẬN ĐẾN: Bảng thực thể gồm M rows
, với mảng mục nhập ACL có size N
(các hàng trong bảng ACL không liên quan ở đây)
SỰ LINH HOẠT CỦA THỜI GIAN :O [N * log (M)]
THAM GIA TIẾP CẬN: Bảng thực thể gồm M rows
, với bảng ACL gồm N rows
SỰ LINH HOẠT CỦA THỜI GIAN :O [M + N]
Trong thực tế, chúng ta thường gặp một tình huống như,
ĐANG ĐẾN
N=10,000
M=1,000,000
O=>60,000
THAM GIA
N=10,000
M=1,000,000
O=>1,010,000
Và theo lý thuyết, trường hợp xấu nhất xảy ra trong mảng sẽ là
ĐANG ĐẾN
N=1,000,000,000
M=1,000,000,000
O=>9,000,000,000
THAM GIA
N=1,000,000,000
M=1,000,000,000
O=>2,000,000,000
Điều này có nghĩa là gì? Tổng hợp / TL; DR
Nếu mỗi Người dùng chỉ được cấp quyền truy cập vào một phần nhỏ của các đối tượng trong một thực thể, hãy sử dụng mảng IN.
Nếu mỗi Người dùng sẽ có một mục nhập ACL cho mọi Đối tượng của Thực thể, hãy sử dụng JOIN. Mặc dù lợi nhuận thu được sẽ không lớn theo một số thứ tự (trừ khi bạn có hàng nghìn tỷ sản phẩm), vì vậy bạn có thể vẫn muốn sử dụng mảng IN.
Trong cả hai trường hợp, chỉ sử dụng ACL khi thực sự cần thiết! Người bình chọn FTW!