Mysql
 sql >> база данни >  >> RDS >> Mysql

Когато използвате ACL на Symfony, по-добре ли е да използвате JOIN заявка или IN масивна заявка?

Нека да разгледаме сложността на времето и за двата случая:

В ПОДХОД НА МАСИВ: Таблица с обекти от 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!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql създава изглед само ако вече не съществува

  2. Mysql Workbench не може да избере чужд ключ

  3. Как да свържа параметър INTERVAL със PDO?

  4. AttributeError:__exit__ на python 3.4

  5. връщане на числа от средата на низ с неправилен формат