Mari kita lihat kompleksitas waktu untuk kedua kasus:
PENDEKATAN DALAM ARRAY: Tabel Entitas dari M rows
, dengan larik entri ACL size N
(baris dalam tabel ACL tidak relevan di sini)
KOMPLEKSITAS WAKTU :O[N*log(M)]
BERGABUNG DENGAN PENDEKATAN: Tabel Entitas dari M rows
, dengan tabel ACL dari N rows
KOMPLEKSITAS WAKTU :O[M + T]
Dalam praktiknya, kita biasanya memiliki situasi seperti,
DAPAT BERURUS
N=10,000
M=1,000,000
O=>60,000
BERGABUNG
N=10,000
M=1,000,000
O=>1,010,000
Dan secara teori, skenario terburuk untuk array adalah
DAPAT BERURUS
N=1,000,000,000
M=1,000,000,000
O=>9,000,000,000
BERGABUNG
N=1,000,000,000
M=1,000,000,000
O=>2,000,000,000
Apa artinya ini? Ringkasan/TL;DR
Jika setiap Pengguna hanya diberikan akses ke sebagian kecil objek dalam entitas, gunakan array IN.
Jika setiap Pengguna akan memiliki entri ACL untuk setiap Objek dari Entitas, gunakan GABUNG. Meskipun keuntungan tidak akan beberapa kali lipat (kecuali Anda memiliki triliunan produk), jadi Anda mungkin masih ingin menggunakan array IN.
Dalam kedua kasus, gunakan ACL hanya jika benar-benar diperlukan! Pemilih FTW!