2016-10-22 3 views
1

Я хотел бы загружать и обрабатывать кучу записей (1 м +) один за другим без загрузки всего набора сразу в AWS.Что такое хороший способ загрузить и обновить многие записи без загрузки всего набора сразу с помощью AWS?

В частности, я работаю над системой, которая соответствует пользователям.

  1. Пользователь представляет рейтинг пункт
  2. Все оценки одного и того же элемента с помощью других пользователей выбирают (1м +)
  3. запись в другой таблице обновляется для каждого рейтинга с новой силой отношения этих двух пользователи.

Эти две таблицы будет выглядеть следующим образом:

RATINGS: userID, itemID, rating 

RELATIONSHIPS: userID1, userID2, relationshipStrength 

Я хотел бы обрабатывать рейтинги без необходимости загружать весь набор сразу (1м +). Я хотел бы обработать каждый рейтинг один за другим, сделать сравнение, обновить отношения и перейти к следующему. Согласованность данных и точность не важны - если пара отношений пропустила его штраф.

Какие средства AWS были бы хороши для достижения этого?

Я смотрел в dynamodb + LAMDA, но (я считаю) это требует загрузки всего набора:

  1. Сохранить рейтинг dynamodb
  2. Dynamodb запускает Лямбда
  3. Lambda запрашивает все другие рейтинги dynamodb (хотят, чтобы избежать этого)
  4. Петля через каждый рейтинг и обновление отношений в другой таблице dynamodb

Я хочу, чтобы избежать необходимости загружать весь набор в памяти на шаге 3.

ответ

0

Если дело только с 1 миллиона записей, я рекомендовал бы написать программу, чтобы сделать это в памяти, а не постоянно запрашивая база данных. Это будет работать намного быстрее.

Требования к памяти будут содержать только несколько байтов для каждой записи (например, 6 байт для таблицы рейтингов, 6 байт для таблицы «Отношения», плюс накладные расходы). С 1 млн. Рейтингов (~ 6 МБ) и, скажем, 10 000 пользователей, перекрестно привязанных к 1000 пользователям (~ 60 МБ), можно поместить в ОЗУ.

Если память является проблемой, но вам не нужно делать это вычисление очень часто, вы можете запустить экземпляр EC2 с оптимизированной памятью под ценой Spot и сделать это относительно дешевле.

Конечно, если вы планируете масштабировать в будущем, вам понадобится лучший способ сделать это, которому не нужно все в памяти, например, использование базы данных SQL или распределение работы между несколькими рабочими.

+0

Спасибо за ответ. 1m + - это не общее количество записей в системе, а количество рейтингов одного элемента. Так, например, может быть миллион статей, каждый из которых имеет миллионный рейтинг, от пользователей 10 м. На самом деле у меня есть функциональный прототип, который находится в памяти, как вы полагаете, я пытаюсь переместить его на нечто более масштабируемое. – Baz

+0

Если это окажется глупо большим, вы можете посмотреть на что-то в Amazon EMR (Hadoop). Или, если вы можете сохранить все рейтинги в памяти, просто проведите по каждой уникальной паре клиентов, передавая результаты на диск. Удачи! –