Продолжаем экскурсию по хранилищам данных. Сегодня на повестке дня Amazon SimpleDB.
Amazon SimpleDB is a web service for running queries on structured data in real time. This service works in close conjunction with Amazon Simple Storage Service (Amazon S3) and Amazon Elastic Compute Cloud (Amazon EC2), collectively providing the ability to store, process and query data sets in the cloud (отсюда)
Simple DB кое в чём похожа на Google Base, о котором я писал в предыдущем посте. Однако нацелена она скорее на задачи для которых сейчас используется MySQL и т.п. Это выражается как в скорости, так и в некоторых других вещах. В принципе, её правильнее было бы сравнивать не с Google Base, а с Google Datastore (о котором речь ещё пойдёт).
Пока сравниваем всё же с Google Base, просто ввиду последовательности изучения.
Как и в Google Base, понятия изначально заданной структуры и таблиц - не существует. Любая запись (item) может иметь любые поля (атрибуты). Записи (items) находятся в domains "доменах" - по смыслу что-то среднее между понятиями "база" и "таблица" в MySQL.
- Любой конкретный запрос распространяется только на содержимое домена. Два разных домена в запросе участвовать не могут (объединять не получится)!
- Еще одно важное отличие - атрибут записи может иметь несколько значений. Т.е., в отличие от традиционного подхода, в color можно записать сразу blue и red :) В каком-то смысле это компенсирует отсутствие join'ов. Удобно, например, для хранение тэгов какого-нибудь документа, вроде того что вы читаете.
- Для разных записей в домене одни и те же атрибуты могут быть или отсутствовать.
- Все данные индексируются автоматически
- Сортировки только по одному полю и сочетаются не со всеми условиями выборки
- Типов данных нет. Всё, включая числа, хранится в виде строк UTF-8. К примеру, сравнение отрицательных чисел с чем-либо, будет некорректным, без специальных мер (сложение с константой, дополнение ведущими нулями и т.д.).
- Следствие распределенного хранения данных: после записи данных сразу возвращается success, но при выборке оттуда в течении секунд по-прежнему могут возвращаться старые данные, пока везде всё не обновиться.
- Довольно жёсткие ограничения. Среди прочего, максимальное число возвращаемых по запросу items - всего лишь 250. Максимальное время выполнения запроса - 5 секунд.
http://docs.amazonwebservices.com/AmazonSimpleDB/2007-11-07/DeveloperGuide/SDBLimits.html
- С crossdomain.xml для Flex/Flash творится тоже, что и на других сервисах. Т.е. нет его:
"We appreciate the need of our developers to access Amazon SimpleDB from their Flash applications. However, for security reasons, we will not be able to post a cross domain policy file for Amazon SimpleDB."
Проблема, вообще говоря, сложнее, чем кажется
- Запросы к сервису можно отсылать через REST, либо через SOAP (авторизация аналогична Amazon S3).
Пример запроса и ответа через REST:
Запрос (создаёт домен, помещает в него запись с тремя полями)
https://sdb.amazonaws.com/?Action=PutAttributes
&DomainName=MyDomain
&ItemName=Item123
&Attribute.1.Name=Color&Attribute.1.Value=Blue
&Attribute.2.Name=Size&Attribute.2.Value=Med
&Attribute.3.Name=Price&Attribute.3.Value=0014.99
&AWSAccessKeyId=<valid_access_key>
&Version=2007-11-07
&Signature=Dqlp3Sd6ljTUA9Uf6SGtEExwUQE=
&SignatureVersion=1
&Timestamp=2007-06-25T15%3A01%3A28-07%3A00
Ответ:
<PutAttributesResponse xmlns="http://sdb.amazonaws.com/doc/2007-11-07">
<ResponseMetadata>
<StatusCode>Success</StatusCode>
<RequestId>f6820318-9658-4a9d-89f8-b067c90904fc</RequestId>
<BoxUsage>0.0000219907</BoxUsage>
</ResponseMetadata>
</PutAttributesResponse>
(BoxUsage - данные о затраченных на выполнение запроса вычислительных ресурсах).
Запрос через SOAP аналогичен, просто в виде XML. Ответ почти такой же, только обёрнут еще в пару тэгов.
- На данный момент Amazon SimpleDB имеет статус Beta и его использование требует специального запроса к Амазонам и неопределенного ожидания (на форуме кто-то жаловался что ждёт 11 месяцев, другому доступ открыли через две недели).
Ссылки:
http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1365 - SimpleDB for AS3 (AIR!)
http://giantflyingsaucer.com/blog/?p=167 - Tutorial (про вышеупомянутую библиотеку)
http://www.simpledbdev.com/simpledbdev/ - "эмулятор" SimpleDB для установки на свою машину (на Python).