Я бы предложил иметь отдельный индекс Elasticsearch для списков ACL, который должен быть намного меньше, чем индекс основного документа.Это позволит вам соответствующим образом настроить параметры индекса ACL, например, (1) с количеством сегментов, меньшим, чем индекс основного документа, (2) auto_expand_replicas, установленным в 0-all, в случае, если вы хотите использовать запрос условий (пример:загрузить все документы, принадлежащие пользователю) и (3) применять различные политики хранения / GDPR.
Индекс ACL может содержать документ для каждого правила ACL, например, userId = 1, docId = 123, opType = POST.Обратите внимание, что этот подход позволит вам определять правила ACL для других типов участников и ресурсов в будущем.Более того, это может поддерживать списки ACL, которые могут динамически сопоставлять новые документы, например, userId = 1, opType = POST, pattern = "*" позволит пользователю с userId = 1 публиковать любой документ, фактически являясь системным администратором.Отключение ACL от документов / пользователей позволит вам обновлять ACL без необходимости обновлять соответствующие документы, что будет работать лучше в Elasticsearch, который не выполняет обновление на месте, а вместо этого удаляет и заново создает документ.Более того, вы сможете заменить (PUT) весь документ, не беспокоясь о сохранении связанных ACL.Однако может потребоваться очистить списки ACL при удалении документов или пользователей, что можно сделать во время удаления или как отдельный запланированный процесс очистки.
Теперь, когда ACL отделены от самих документов, они могуткэшироваться в memcached или кластере Redis, не требуя слишком много памяти.В типичной системе OLTP в любой момент времени активен только небольшой набор пользователей, поэтому вы можете соответствующим образом настроить кэш LRU для увеличения частоты обращений.Трудно дать дополнительные рекомендации, не зная, какие шаблоны доступа характерны для вашей системы.
Последнее, на что следует обратить внимание, это , что генерирует ACL.Если некоторые ACL генерируются автоматически, например, на основе некоторого шаблона, то, возможно, вы могли бы использовать этот шаблон в своей системе, чтобы избежать наличия правила ACL для пользователя на документ.Например, если некоторые ACL генерируются из службы каталогов, вы можете кэшировать (и периодически обновлять) правила LDAP в вашей системе управления ACL.