Не удается получить данные (более 100 тыс. Строк) для панели управления

Довольно новичок в DynamoDb и AWS в целом, это очень интересно, но я чувствую, что кривая обучения немного крута. В любом случае, вот моя ситуация и моя проблема.

У нас есть собственное мобильное приложение, которое сохраняет в таблице DynamoDb одну строку каждый раз, когда пользователи выполняют поиск. (база данных - это история поиска с UUID и критериями поиска). В среднем каждый день в нашу таблицу попадает несколько тысяч новых запросов. В таблице есть только первичный ключ, который является идентификатором поиска.

Приложение довольно новое, но мы уже достигли нескольких сотен тысяч строк в таблице и можем ожидать, что в следующие месяцы будет миллион. Это простые простые данные с уникальным идентификатором, строкой и числами в других атрибутах. Никакой связи, никаких отношений и т. Д. Я уже тогда почувствовал, что, возможно, DynamoDb, возможно, не лучший выбор, но, тем не менее, я везде читал, что он может быть подходящим для чего угодно при правильном управлении.

Рядом с этим есть панель управления веб-приложения, которая - благодаря rest api с использованием nodejs lambdas - запрашивает у DynamoDB статистику поисков: сколько поисков в день, список последних поисков ... проблема в том, что DynamoDb не совсем подходит для запроса сотен тысяч данных (ограничение в 1 МБ, ограничения запроса, кредиты ...). Когда я сканирую, я получаю всего 3000 запросов. Я попытался выполнить цикл сканирования с использованием последнего запрошенного индекса, но после нескольких тестов я не получил данных и заблокировал максимальную пропускную способность. Кажется действительно очевидным, что у меня нет правильного подхода, чтобы перенести все эти поисковые запросы в мое веб-приложение. Итак, каков был бы правильный подход? Мои идеи следующие, но я открыт для более опытных:

  • Переход на базу данных SQL (с помощью миграции aws?). Неужели тогда будет легче?

  • создание лямбда-выражений для выполнения запланированных заданий каждую ночь, чтобы получать статистику каждый день, чтобы мне не приходилось постоянно запрашивать всю базу данных, а только некоторые из самых последних поисков и строк статистики? Это выполнимо? какой-нибудь учебник по node.js / lambdas, который вы можете знать по этому поводу?

  • лучшее управление индексами? Я все еще теряюсь в этом.

Жду вашего мнения.


person Ivo    schedule 03.11.2019    source источник
comment
Обычно для аналитики вы можете сделать копию данных в S3, а затем использовать что-то вроде Glue, Athena и т.д ... или даже EMR, если вам нужно выполнить агрегирование по огромному количеству данных. Вам следует заглянуть в «Паттерн озера данных»   -  person Madeo    schedule 03.11.2019


Ответы (1)


Добавьте еще один слой, чтобы обеспечить полнотекстовый поиск.

Например, с помощью Elasticsearch, Algolia или других подобных.

Примечания:

Elasticsearch может стоить вам дорого, если сравнить стоимость на Dynamodb.

Ссылка: https://aws.amazon.com/about-aws/whats-new/2015/08/amazon-dynamodb-elasticsearch-integration/.

person BMW    schedule 03.11.2019
comment
Поскольку я запрашиваю полную таблицу, чтобы построить на ее основе статистику, я, к сожалению, не думаю, что это могло бы мне слишком сильно помочь (не говоря уже о цене). - person Ivo; 03.11.2019
comment
Мне интересно, какое решение вы выберете в конечном итоге, но я чувствую, что бы вы ни попробовали, вы бы использовали мой путь частично или полностью, давайте посмотрим. - person BMW; 03.11.2019
comment
Я работаю над лямбдой, запускаемой по расписанию каждую ночь, чтобы получать статистику за день, статистика за каждый день будет храниться в одной строке, а затем я буду запрашивать только этот тип сатистики строк. Буду держать вас в курсе, если у меня получится. - person Ivo; 04.11.2019