@DiGiTAll

Как организовать хранение данных в БД?

Есть список из 100К пользователей с уникальными ID, хранящийся в БД.
Есть список из 100К изображений с уникальными ID, хранящийся в БД.

Пользователи заходят на сайт и просматривают изображения в галерее, состоящей из всех изображений из базы.
Обратиться к произвольному изображению галереи пользователь не может. Он может осуществлять лишь переход в двум ближайшим изображениям от текущего (prev, next).
При этом пользователь не должен ещё раз увидеть ранее просмотренное изображение, если ещё остались изображения, которые он не видел.

Вопросы.
1). Как хранить информацию о списке просмотренных / ещё не просмотренных изображений конкретным пользователем? Как быстро выбирать изображения для просмотра? (Подумываю, над предварительной выборкой изображений для каждого пользователя для его ближайшего обращения).

2). Какой стэк использовать? SQL/NoSQL?
  • Вопрос задан
  • 1021 просмотр
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
1) я бы помимо ID хранил еще порядковый номер, который бы четко задавал последовательность изображений. В таком случае мы можем хранить рэйнджи не просмотренных изображений. Ну и так как у нас может быть произведен переход только к соседнему изображению - это легко устроить.

2) без разницы. Лучше по дефолту брать sql и nosql для кеширования и агрегации данных в случае необходимости.
Ответ написан
kostja
@kostja
Разработчик СУБД Tarantool
Уточните, prev/next выдаёт случайный id или соседний? Если соседний, то выходит так, что все изображения которые просмотрел пользователь, формируют диапазон id.

Если так, то для каждого пользователя, надо хранить min/max id изображения, которое он уже посмотрел, а также его текущую позицию.

В реляционной базе была бы такая таблица:
user id, min_image_id, max_image_id, current_image_id

Тогда, когда пользователь кликает prev/next надо в таблице изображений находить изображение, следующее за текущим, и обновлять состояние пользователя.

В целом, можно хранить и все изображения, которые просмотрел пользователь, сути это не изменит, просто потребуется больше места.

Сделать такую штуку можно на чём угодно, могу рассказать как сделать на Тарантуле.
Ответ написан
Ваш ответ на вопрос

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

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