@JIakki

Какая лучшая структура базы данних для shared объектов?

Есть пользователь, у него есть документ и я хочу поделиться этим документом з другим пользователем ( хочу взять документ через api, не через shared ссылку).

Где лучше сохранить это разрешение? :
1. В записи документа добавить всех кому можна смотреть документ ( но тогда сложно найти эту запись тем пользователем с кем поделились)
2. Создать Еще одну таблицу(коллекцию) где хранить что, кто и кому дал права на документ. ( и два варианта реализации ) :
- создавать для каждого пользователи новую запись ( но потом будет много записай для одного документа)
- добавить массив пользователей которым можна смотреть документ ( но потом пользователю будет немного дольше искать документ )
3. Ваше решение

Зарание спасибо
  • Вопрос задан
  • 189 просмотров
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Используйте redis, и его сеты - sadd. В сет и добавляйте всех пользователей для данного документа. Сам ключ будет ID документа, а мемберы - ID пользователей
127.0.0.1:6379> SADD doc:1234 "uid:1234"
(integer) 1
127.0.0.1:6379> SADD doc:1234 "uid:1235"
(integer) 1
127.0.0.1:6379> SADD doc:1234 "uid:1237"
(integer) 1
127.0.0.1:6379> SMEMBERS doc:1234
1) "uid:1237"
2) "uid:1235"
3) "uid:1234"
127.0.0.1:6379>

Ну и как бонус, ставьте TTL на ключ, например на 12 дней. Через 12 дней у пользователей все права к документу пропадут.
127.0.0.1:6379> EXPIRE doc:1234 1036800
(integer) 1
127.0.0.1:6379> ttl doc:1234
(integer) 1036789
127.0.0.1:6379> ttl doc:1234
(integer) 1036786
127.0.0.1:6379> ttl doc:1234
(integer) 1036784
127.0.0.1:6379>

Можно и наоборот, пользователем сделать ключ, а значениями доступные документы. Можно и еще как нибудь поизвращаться.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@lega
1. В записи документа добавить всех кому можна смотреть документ ( но тогда сложно найти эту запись
Почему сложно? Массив с пользователями кому можно - быстрый поиск по индексу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы