Amazon Простая БД
Amazon SimpleDB — это распределенная база данных , написанная на языке Erlang [ 1 ] компанией Amazon.com . Он используется как веб-сервис совместно с Amazon Elastic Compute Cloud (EC2) и Amazon S3 и является частью Amazon Web Services . Об этом было объявлено 13 декабря 2007 года.
Подобно EC2 и S3, Amazon взимает плату за хранение, передачу и производительность SimpleDB через Интернет. 1 декабря 2008 года Amazon ввела новую цену на бесплатный раздел за 1 ГБ данных и 25 машино-часов. Переход на другие сервисы Amazon Web Service осуществляется бесплатно.
Ограничения
SimpleDB обеспечивает окончательную согласованность , которая является более слабой формой согласованности по сравнению с другими системами управления базами данных . Это часто считается ограничением, потому что с ним сложнее рассуждать, что затрудняет написание правильных программ, использующих SimpleDB. Это ограничение является результатом фундаментального компромисса при проектировании. Отказавшись от непротиворечивости, система может достичь еще двух очень желательных характеристик:
- Доступность: Компоненты системы могут выйти из строя, но служба будет продолжать функционировать должным образом.
- Допуск к разделению: Компоненты системы связаны друг с другом с помощью компьютерной сети . Если компоненты не могут обмениваться данными друг с другом по сети (состояние, известное как разделение сети ), работа системы будет продолжена.
Предполагается, что отказы компонентов неизбежны; поэтому обе функции считались необходимыми для обеспечения надежного веб-сервиса . Теорема CAP утверждает, что система не может демонстрировать эти свойства вместе с согласованностью; поэтому дизайнерам пришлось согласиться на более слабую форму согласованности.
Опубликованные ограничения:
Ограничения магазина
| Атрибут | Максимум |
|---|---|
| домены | 250 активных доменов на аккаунт. Запросить дополнительную информацию можно, заполнив форму. |
| размер каждого домена | 10 ГБ |
| атрибуты на домен | 1 000 000 000 |
| атрибуты на элемент | 256 атрибутов |
| размер по атрибуту | 1024 байта |
Ограничения запросов
| Атрибут | Максимум |
|---|---|
| элементы, возвращенные в ответе на запрос | 2500 шт. |
| секунд может выполняться запрос | 5 секунд |
| имена атрибутов для предиката запроса | 1 имя атрибута |
| сравнения по предикату | 22 оператора |
| предикаты по выражению запроса | 20 предикатов |
Характеристики
Условное размещение и условное удаление — это новые операции, которые были добавлены в феврале 2010 года. Они решают проблему при одновременном доступе к SimpleDB. Рассмотрим простую программу, использующую SimpleDB для хранения счетчика, то есть числа, которое можно увеличивать. Программа должна делать три вещи:
- Получить текущее значение счетчика SimpleDB.
- Добавьте единицу к значению.
- Сохраните новое значение в том же месте, что и старое значение в SimpleDB.
Если эта программа запущена, когда никакие другие программы не обращаются к SimpleDB, она будет работать нормально; однако часто желательно, чтобы программные приложения (особенно веб-приложения ) обращались к одним и тем же данным в одно и то же время. При одновременном доступе к одним и тем же данным возникает состояние гонки , что может привести к необнаружимой потере данных.
Продолжая предыдущий пример, рассмотрим два процесса, A и B, выполняющие одну и ту же программу. Предположим, что SimpleDB обслуживает запросы данных, как описано в шаге 1, от A и B. A и B видят одно и то же значение. Допустим, текущее значение счетчика равно 0. Из-за шагов 2 и 3 A попытается сохранить 1. B попытается сделать то же самое; следовательно, конечное значение счетчика будет равно 1, хотя ожидаемое конечное значение счетчика равно 2, поскольку система предприняла две попытки увеличения, одну на A и одну на B.
Эту проблему можно решить, используя условное выражение. Предположим, мы изменим шаг 3 следующим образом: вместо безусловного сохранения нового значения программа просит SimpleDB сохранить новое значение только в том случае, если содержащееся в ней значение совпадает со значением, полученным на шаге 1. Таким образом, мы можем быть уверены, что значение счетчика фактически увеличивается. Это вносит некоторую дополнительную сложность; Если SimpleDB не удалось сохранить новое значение, поскольку текущее значение не соответствует ожидаемому, программа должна повторять шаги с 1 по 3 до тех пор, пока операция условного размещения фактически не изменит сохраненное значение.
Постоянное чтение
Согласованное чтение — это новая функция, выпущенная одновременно с условным размещением и условным удалением. Как следует из названия, последовательное чтение решает проблемы, возникающие из-за возможной модели согласованности SimpleDB. Рассмотрим следующую последовательность операций:
- Программа A хранит некоторые данные в SimpleDB.
- Сразу после этого A запрашивает только что сохраненные данные.
Гарантия возможной согласованности SimpleDB не позволяет нам сказать, что данные, полученные на шаге 2, отражают обновления, сделанные на шаге 1. Окончательная согласованность гарантирует только то, что шаг 2 отражает полный набор обновлений из шага 1 или ни одно из этих обновлений. Согласованное чтение может быть использовано для обеспечения того, чтобы данные, полученные на шаге 2, отражали изменения на шаге 1.
Причина, по которой вы можете получить противоречивые результаты, если вы не используете операцию согласованного чтения, заключается в том, что SimpleDB хранит данные в нескольких местах (для доступности), а новые данные из шага 1 могут быть записаны не во все места, когда SimpleDB получает запрос данных. на шаге 2. В этом случае возможно, что запрос данных на шаге 2 будет обслуживаться в одном из мест, где новые данные не были записаны.
Amazon не рекомендует использовать последовательное чтение, если только это не требуется для исправления. Причина этой рекомендации заключается в том, что скорость, с которой обслуживаются согласованные операции чтения, ниже, чем при обычном чтении.
Связь с DynamoDB
Были разговоры о замене SimpleDB на DynamoDB (она больше не «повторяется», хотя Amazon не планирует ее удалять). DynamoDB кажется его преемником. [ 2 ]
Смотрите также
Ссылки
- ↑ Что нужно знать об Amazon SimpleDB
- ↑ «Amazon DynamoDB — быстрая и масштабируемая служба базы данных NoSQL, разработанная для масштабируемых интернет-приложений — все распределено» . www.allthingsdistributed.com . 18 января 2012 г.