Как сделать эффективный запрос (по стоимости) в DynamoDB (переход от RDS) - PullRequest
0 голосов
/ 05 июня 2019

Я просто новичок в 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?

...