Как отсортировать посты по голосам за указанный c диапазон дат без SQL? - PullRequest
0 голосов
/ 26 января 2020

В настоящее время я пытаюсь разобраться с номером SQL (что довольно сложно из SQL). Поскольку я хотел бы go просмотреть некоторые примеры, чтобы лучше понять, я в настоящее время немного застрял со следующим:

Предполагая, что у меня есть следующие коллекции: пользователь, сообщения и голоса. Пользователь может увеличивать или уменьшать количество сообщений и фильтровать их. Как мне нужно структурировать свои коллекции для эффективного запроса чего-то вроде «большинства постов с наибольшим количеством голосов за последние 24 часа»?

Моим первым предположением было бы что-то вроде:

votes:
  user (user id)
  post (post id)
  value (down or upvote)

posts:
  title
  votes:
    user (user id)
    date
    value (down or upvote)

Что сразу поймало мою Внимание к этому подходу: мне нужно обновлять голоса в голосах и сообщениях каждый раз, когда пользователь меняет свой голос, верно? Кроме этого, это было бы моим решением этой проблемы, так как я могу получить доступ к дате голосования в каждом посте. Мое единственное другое беспокойство в этом пункте было бы, что это возможно может быть проблематичным c с тысячами голосов?

1 Ответ

0 голосов
/ 28 января 2020

В идеальном мире вы могли бы просто вести счет на почте. Upvotes будет увеличивать его, downvotes будет уменьшать его. (Для этого случая есть атоми c операции.) Это означает, что каждое "покажи мне сообщение (с голосами) занимает одно крошечное чтение. К сожалению, это не мешает пользователям дублировать голосование.

Так что используйте 2 таблицы: одну для сообщений и одну для пользователей.

Когда пользователь голосует, вы сохраняете его голос в таблице пользователей. Эта таблица хранит UID + POSTID (основной ключи), а также хранит их VOTE. Вы можете использовать потоки DynamoDB для запуска функции Lambda, которая «копирует» голосование «вверх / вниз» на сообщение. удален, и свернут на фактическое сообщение, только если это действительное изменение в голосовании пользователя.

Это означает, что каждый "показать мне сообщение (с голосами) занимает одну крошечную читать, и "пользовательский голос" - это две простые записи.

...