Я планирую использовать следующую формулу для подсчета "трендовых" сообщений:
Trending Score = (p - 1) / (t + 2)^1.5
p = голосов (баллов) от пользователей.t = время с момента отправки в часах.
Я ищу совет о том, как структурировать таблицы в моей базе данных, чтобы можно было запрашивать трендовые сообщения с помощью DynamoDB (службы баз данных nosql от Amazon).* DynamoDB требует первичный ключ для каждого элемента в таблице.Первичный ключ может состоять из 2 частей: атрибут хэша (строка или число) и атрибут диапазона (строка или число).Атрибут Hash должен быть уникальным для каждого элемента и является обязательным.Атрибут Range является необязательным, но при использовании DynamoDB будет строить отсортированный индекс диапазона на атрибуте Range.
Структура, которую я имел в виду, выглядит следующим образом:
TableName: Users
HashAttribute: user_id
RangeAttribute: NONE
OtherFields: first_name, last_name
TableName: сообщения
HashAttribute: post_id
RangeAttribute: NONE
OtherFields: user_id,title, content, points, categories[ ]
TableName: Категории
HashAttribute: category_name
RangeAttribute: post_id
OtherFields: title, content, points
TableName: Counters
HashAttribute: counter_name
RangeAttribute: NONE
OtherFields: counter_value
Итак, вот пример типов запросов, которые я бы сделал со следующей настройкой таблицы (пример: user_id = 100):
User Action 1:
Пользователь создает новый пост и отмечает его для 2 категорий (бейсбол, футбол)
Запрос (1):
Проверьте текущее значение для counter_name = 'post_id' и приращения + 1 и используйте новый post_id
Запрос (2): Вставьте в таблицу сообщений следующее:
post_id=value_from_query_1, user_id=100, title=user_generated, content=user_generated, points=0, categories=['baseball','soccer']
Запрос (3):
Добавьте в таблицу категорий следующее:
category_name='baseball', post_id=value_from_query_1, title=user_generated, content=user_generated, points=0
Запрос (4):
Insв таблицу категорий добавьте следующее:
category_name='soccer', post_id=value_from_query_1, title=user_generated, content=user_generated, points=0
Конечная цель - иметь возможность выполнять следующие типы запросов:1. Запрос на последние сообщения2. Запрос на сообщения в определенной категории3. Запрос сообщений с наивысшими баллами
Кто-нибудь знает, как я могу структурировать свои таблицы так, чтобы я мог сделать запрос для трендовых сообщений?Или это то, что я отказываюсь делать, переключаясь на DynamoDB?