Перебор всех элементов в SimpleDB - PullRequest
2 голосов
/ 01 апреля 2010

Допустим, у меня есть домен AWS SimpleDB с около 3 миллионами элементов, каждый элемент имеет атрибут «foo» со значением некоторого произвольного целого числа (который, конечно, фактически хранится в SimpleDB в виде строки, но давайте проигнорируем преобразование в и из сейчас). Я хотел бы увеличивать значение foo для каждого элемента каждые 60 секунд, пока оно не достигнет максимального значения (максимальное значение не будет одинаковым для каждого элемента, максимальное значение элемента будет сохранено как другое значение атрибута в элементе), а затем сбросить значение foo до нуля : читать, увеличивать, оценивать, хранить.

Принимая во внимание большое количество элементов и жесткий 60-секундный лимит времени, возможен ли этот подход в SimpleDB? У кого-нибудь есть подход, чтобы сделать эту работу?

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

Вы можете сделать это, но это невозможно. Вы можете получить только 100-300 PUT в секунду для одного домена. Вы можете читать до 1000 элементов в секунду, поэтому записи будут узким местом.

Чтобы быть на консервативной стороне, скажем, 100 операций с хранилищем в секунду на домен. Вам понадобится 500 доменов, чтобы открыть достаточно пропускной способности, чтобы хранить все 3 миллиона в минуту. По умолчанию вы получаете только 100, поэтому вам придется просить больше.

Также это будет дорого. Записи с небольшим количеством атрибутов составляют около 3 долларов за миллион, а чтения - около 1,30 долларов за миллион. Это около $ 13 / мин.

Единственное, что я действительно могу предложить, это если бы был способ объединить 3 миллиона предметов в меньшее количество предметов. Если бы был способ поместить 50 «предметов» в каждый реальный предмет, вы могли бы сделать это с 10 доменами по цене около $ 15.50 / час. Но я все еще не назвал бы это осуществимым, поскольку вы можете получить кластер из 10 особо крупных высокопроизводительных серверов EC2-сервера за 6,80 долл. / Час.

0 голосов
/ 15 января 2013

Почему бы не сгенерировать значение в read time из доверенных часов? Я собираюсь составить несколько имен:

  • Touch_time - значение периода (в секундах с 1970 года), когда элемент был инициализирован на ноль.
  • Max_age - количество минут, когда время приближается.
  • Current_time - значение эпохи сейчас.

Таким образом, в любое время вы можете получить значение, которое вы предлагаете сохранить в атрибуте, по

(current_time - touch_time)% (max_age * 60)

Предполагая, что max_age изменяется сравнительно редко, и все доверяют touch_time и current_time с точностью до минуты, и для этого NTP.

...