строго нормализованная реляционная база данных может стать узким местом, когда речь идет о таких приложениях. Я еще не видел решения, но вы можете ускорить процесс, если рассмотрите таблицы, которые будут запрещены в нормализованной БД, в качестве своего рода кеша.
Мой подход заключается в том, чтобы иметь строго нормализованную часть БД, содержащую фактические данные, и ненормализованную часть, которая действует как кэш ... обновления между этими двумя частями осуществляются одним способом: от нормализованной части до кеша (в случае, если несогласованных данных / аномалий в cahce, кеш можно перестроить)
преимущество в том, что ваши разрешения для пользователя могут быть агрегированы (возможно, даже как двоичный объект) и извлечены как одна строка для пользователя / для продукта / и т. Д., Если разрешения поступают из кэша ... в зависимости в случае использования это может быть очень быстро
недостаток: обновления кешированных данных более сложны: вам нужно обновить обычную БД, а затем вам придется обновить кеш, иначе ваше обновление не будет видимо кешу, пока оно не будет переброшено ... это нет больших проблем, если ваши разрешения не обновляются каждые 2 секунды
плюс: вы должны внедрить и поддерживать кеш и приложения, которые используют это ...
Итак, одно предупреждение: даже если этот может (== это не обязательно будет в каждом случае) очень быстрым, вы не должны использовать этот подход, пока остаются какие-либо другие опции. (Вы должны избегать нарушения нормализации так долго, как можете; правильно ли проиндексирована БД? Может ли такой кэш быть настроен где-то еще, т. е. где-нибудь приложение-служба?)