Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Ao usar a ACL do Symfony, é melhor usar uma consulta JOIN ou uma consulta de matriz IN?


Vejamos as complexidades de tempo para ambos os casos:

EM ABORDAGEM DE MATRIZ: Tabela de entidades de M rows , com array de entradas ACL de size N (linhas na tabela ACL não são relevantes aqui)

COMPLEXIDADE DO TEMPO :O[N*log(M)]

ABORDAGEM DE PARTICIPAÇÃO: Tabela de entidades de M rows , com tabela ACL de N rows

COMPLEXIDADE DO TEMPO :O[M + N]

Na prática, geralmente temos uma situação como,

EM MATRIZ
N=10,000
M=1,000,000
O=>60,000

PARTICIPE
N=10,000
M=1,000,000
O=>1,010,000

E, em teoria, o pior cenário para in array seria

EM MATRIZ
N=1,000,000,000
M=1,000,000,000
O=>9,000,000,000

PARTICIPE
N=1,000,000,000
M=1,000,000,000
O=>2,000,000,000

O que isso significa? Resumo/TL;DR

Se cada usuário tiver acesso apenas a uma fração dos objetos em uma entidade, use o array IN.

Se cada usuário tiver uma entrada ACL para cada objeto de uma entidade, use JOIN. Embora os ganhos não sejam de várias ordens de magnitude (a menos que você tenha trilhões de produtos), você ainda pode usar o array IN.

Em ambos os casos, use ACL somente quando for absolutamente necessário! Eleitores FTW!