Я просто новичок в NoSQL и DynamoDB. Я пытаюсь перейти от использования AWS RDS к DynamoDB.
У меня есть пользователь таблицы, который может иметь более одного опыта работы и может иметь более одного интереса (таблица интереса содержит основные данные в таблице интересов). Будет много фильтрации запросов пользователей по их опыту работы и интересам. Пример: найдите пользователя с опытом работы «Программист» или найдите пользователя с интересом «SQL, NoSQL».
User Table:
- user_id (PK)
- name
- birthdate
- ...
Work Experience Table:
- user_id (PK)
- work_sequence_id (PK)
- work_title
- work_description
Interest Table:
- interest_id (PK)
- interest_name
User Interest Table:
- user_id (PK)
- interest_id (PK)
Поэтому я пытаюсь преобразовать его в DynamoDB:
User Table:
- user_id (PK/Partition Key)
- name
- birth_date
- ...
Work Experience Table:
- user_id (PK)
- work_sequence_id (SK/Sort Key)
- work_title (global secondary index)
- work_description
Для таблицы интересов я хочу реструктурировать таблицу. По сути, помимо фильтрации пользователей по интересам, я просто хочу получить самый популярный интерес для слова предложения (фильтр по слову, содержащему слово search_word). Пример, если 7 пользователей интересуются «SQL», а 10 пользователей интересуются «NoSQL». Когда пользователь ищет слово «SQ», слово «NoSQL» появляется первым, а «SQL» - вторым.
Итак, я создаю так:
User Interest Table:
- user_id (PK)
- interest_name (SK)
Interest Table:
- interest_name (PK)
- count (SK)
Тогда я буду использовать количество, чтобы получить популярный интерес.
Обычно я использую объединение для получения пользовательских данных, опыта работы и интересов, а также использую агрегированную функцию для получения наибольшего интереса. Теперь мне нужно использовать четыре оператора запроса, чтобы получить все данные. По сути, мне нужно эффективно и действенно хранить данные в терминах стоимости.
Есть ли у вас предложения по проектированию базы данных для этого сценария в DynamoDB?