В дополнение к линейке реляционных СУБД (MySQL, PostgreSQL, Oracle, Microsoft SQL Server) компания Amazon с 2012 г. предлагает облачный доступ к NoSQL СУБД DynamoDB. В чем отличие данного сервиса от облачных РСУБД (см. “Реляционная СУБД в облаке Amazon”)? Это прежде всего оригинальная схема оплаты (не за объем базы данных, а за активность обращения к ней) и соответственно иная концепция масштабирования. DynamoDB при росте интенсивности запросов и объёмов пересылаемых наборов данных умеет самостоятельно масштабироваться “по горизонтали” на большее количество (сотни) серверов. Раньше она использовала жёсткие диски, но сегодня задействует только скоростные флэш-накопители. Главное в этом подходе — точно предсказуемые производительность и время отклика (существенно меньше 10 мс) на запросы клиентов, что важно для масштабных онлайновых систем реального времени. Формально ограничений на объём данных в базе нет, новое пространство подключается автоматически по мере роста хранимой информации. DynamoDB функционирует в режиме нуль-администрирования, данные синхронизируются по трём географическим зонам.
Взамен привычных баз данных DynamoDB предлагает концепцию таблиц “ключ — значение”, которые качественно отличаются от реляционных матриц, так как не поддерживают жёсткие схемы описания информации. Каждый элемент (объект, запись) в таблице может отличаться от других количеством и типом полей (атрибутов), при этом поддерживаются первичный и вторичный механизмы индексации полей, что позволяет не потерять в производительности запросов. Значения полей таблицы могут быть строковыми, числовыми, двоичными, а также наборами значений. Размер одной записи не должен превышать 64 Кб. Важная характеристика DynamoDB — практически гарантированная поставка самых последних значений из таблиц, что далеко не всегда обеспечивают другие NoSQL-системы, не очень эффективно кэшируя данные. Достоверность этой поставки можно настраивать дополнительно.
DynamoDB в отличие от многих других NoSQL-систем проприетарна. Так как единого интерфейса к NoSQL-продуктам пока не существует, пользователям необходимо изучить с нуля схемы и интерфейсы взаимодействия с этой СУБД, что, впрочем, не слишком сложно. Но определённый порог вхождения в данную технологию на фоне множества открытых и свободных NoSQL-продуктов подтолкнул Amazon к выпуску в сентябре 2013 г. локальной версии DynamoDB, которую можно установить на свой ПК и потренироваться в работе с ней локально.
DynamoDB позиционируется как простая в эксплуатации СУБД для онлайновых систем, которые могут масштабироваться до тысяч запросов в секунду с сохранением короткого времени отклика. При этом она, конечно, не сравнится по функциональности с массовыми РСУБД и не умеет выполнять сложные запросы, хотя поддерживается ряд атомарных операций, которые, например, изменяют значение конкретного числового поля в записи. Главное, DynamoDb позволяет максимально быстро развернуть онлайновую систему, которой требуется база с достаточно простой организацией данных.
Есть для DynamoDB и “тяжёлая” корпоративная ниша: сегодня NoSQL-системы нередко применяются одновременно с платформой распределённых вычислений Hadoop/MapReduce, и DynamoDB тут не исключение. Этот рынок Amazon никак не могла оставить без внимания, предлагая соответствующий сервис Elastic MapReduce — комплексную аналитику по таблицам DynamoDB через облачный Hadoop с возможностью использования дополнительных источников данных из РСУБД службы Amazon RDS.
Создаём таблицу DynamoDB
Работа с DynamoDB, как и со многими другими сервисами Amazon, начинается с единственной кнопки Create Table. Она исходно доступна в консоли DynamoDB и служит для создания таблицы, по смыслу аналогичной базе данных РСУБД. Задаём название таблицы и первичного ключа (рис. 1), при желании сразу настраиваем индексы (рис. 2). Далее следует важный шаг определения “ёмкости” полосы пропускания системы, на основании которой будут начисляться платежи. Эта ёмкость зависит от среднего размера записи, количества обращений к ней, а также от необходимости поставки самых последних версий данных (Strongly Consistent). Скажем, планируется хранить таблицу с читателями PC Week/RE, каждый читатель определяется своим уникальным идентификатором, ФИО и минимальной справочной информацией, которые в общей сложности не превысят 1 Кб. Интенсивность обращений к такой таблице на первых порах будет минимальная — один запрос на запись и один запрос на чтение в секунду (что составляет около 170 тыс. обращений в сутки). Вводим соответствующие значения, нажимаем Calculate и получаем относительную “ёмкость” нашей системы (рис. 3) на считывание в условных единицах Read Capacity Units (RCU) и на запись в единицах Write Capacity Units (WCU). Каждая из них условно соответствует одной операции обращения к таблице в секунду, обрабатывающей небольшой объем данных (до килобайта). Именно по этим значениям в дальнейшем сервис DynamoDB и будет масштабироваться. Такая минимальная услуга, в то же время вполне пригодная для использования в реальном проекте, будет стоить 1,17 долл. в месяц.
Чтобы не переплачивать за внезапно нахлынувший поток клиентов, на четвертом шаге задается возможность оперативного оповещения администратора, если, например, интенсивность обращений к таблице в течение часа превысит 80% от максимума (рис. 4). Но даже в бесплатном режиме пользователю предоставляется 40 млн. операций над таблицами в месяц (примерно семь запросов в секунду). Правда, первичный объем таблиц ограничен величиной в100 Мб, что объясняется использованием дорогостоящих флэш-хранилищ. Amazon на фоне высокой конкуренции в мире NoSQL и Big Data прикладывает явные демпинговые усилия для продвижения своей DynamoDB, и сегодня подходящее время этим воспользоваться.
В консоли DynamoDb по завершении процесса создания новой таблицы показывается перечень уже сформированных таблиц (рис. 5). По каждой из них можно получить детальную информацию о текущих параметрах и схемах индексации, а также изучить около десятка различных графиков мониторинга состояния таблицы и нагрузки. Кроме того, пользователю доступны механизмы детального сбора информации о работе системы, включая сервис Amazon CloudWatch.
Загружаем данные в DynamoDb
Вводить данные в таблицу можно как программным путём, так и непосредственно из консоли Amazon. Для последнего варианта служит кнопка Explore Table, которая показывает содержимое выбранной таблицы. Добавление в таблицу нового объекта выполняется нажатием кнопки New Item — пользователю будет предложено ввести значения в ранее сформированные поля (в нашем примере это будут поля Reader Id и Reader Name), а также при желании добавить любое количество дополнительных полей (атрибутов). Объект будет записан в таблицу кнопкой Put Item.
Как видно из рис. 6, в разделе Browse Items, где выводится текущее содержимое таблицы, содержатся записи с разным количеством атрибутов. При двойном щелчке на любой записи можно продолжить редактирование полей объекта, скопировать его содержимое в новую запись, а также удалить выбранный элемент (рис. 7). Переключатель Scan/Query служит для перехода из режима визуализации содержимого таблицы в режим простого поиска нужного элемента. Для этого надо указать название выбранного поля и индекса и ввести соответствующее значение ключа (рис. 8).
Обращаемся к таблицам DynamoDb
Сама по себе NoSQL-таблица в облаке Amazon бесполезна, пока к ней не организован доступ прикладных программ — например, из сервера приложений или, в более простой архитектуре, от клиентского (мобильного) софта. Программный интерфейс к DynamoDb реализован для Java, C#/.NET, PHP и ряда других популярных систем. Например, доступ к содержимому таблиц DynamoDb легко организовать для сред разработки Eclipse или Microsoft Visual Studio 2010/2012 — для этого достаточно установить пакет AWS Tools. После его инсталляции в соответствующей оболочке при запуске выводится довольно навязчивое окно Amazon с краткой инструкцией по первичной эксплуатации. В список обозревателей Visual Studio после установки пакета добавится AWS Explorer. При его вызове будут показаны все зарегистрированные на данный момент сервисы AWS. К любому из них можно подключиться: как правило, в каждом случае предоставляется минимальный набор возможностей, схожих с функциями консоли AWS. Для DynamoDb, например, доступны режимы создания таблиц, модификации атрибутов, редактирования записей (рис. 9). Несложно реализуются и программные обращения к таблицам, сайт AWS предлагает достаточное количество примеров кода.
Работа с таблицами
Из консоли DynamoDb доступны типовые функции создания новой таблицы по уже описанной схеме (кнопка Create Table) и удаления таблицы (кнопка Delete Table). Важная кнопка Modify Throughput предназначена для модификации пропускной способности таблицы — фактически с её помощью выполняется масштабирование системы под растущую нагрузку (рис. 10). При каждой модификации текущие показатели RCU/WCU могут быть изменены в два раза.
Текущее содержимое таблицы может быть импортировано из хранилища Amazon S3 и экспортировано в него с помощью кнопок Import Table/Export Table. Для этого надо предварительно сформировать канал связи с S3 (AWS Data Pipeline), по которому передаются данные в обе стороны посредством типовых механизмов (SQL-запросы, консольные команды и т. д.).
Кнопка Access Control задаёт политики доступа к таблице через идентификационные механизмы Facebook и Google, а также посредством логина Amazon, с поддержкой криптографической аутентификации пользователей (рис. 11).
Сколько платить за таблицы DynamoDb
Схема оплаты за DynamoDb не такая тривиальная, как в случае с рассмотренными ранее сервисами, потому что она привязана к упомянутой пропускной “ёмкости” таблицы в единицах RCU/WCU, приведённых к физическому объёму этих данных, что требует предварительных расчётов. Например, при работе с ирландским ЦОДом надо будет заплатить по 0,00735 долл. в час за каждые 10 WCU и 50 RCU. Пространство для базы данных, включая индексы, обойдётся в 0,25 долл. в месяц за каждый гигабайт на амазоновском флэш-накопителе (первые 100 Мб бесплатны). Исходящий трафик до 10 Тб в месяц стоит 0,12 долл. за гигабайт, далее немного дешевле.
Например, планируется весьма внушительная система с миллионом обращений на считывание и запись в сутки, которая будет работать с таблицей, хранящей 3 Гб информации. Такая интенсивность соответствует примерно двенадцати обращениям обоих типов к таблице в секунду (12 WCU и 12 RCU). Тогда ежечасно операции считывания и записи обойдутся в 0,00882 и 0,001764 долл. соответственно. В сутки это составит 0,254 долл., а в месяц 7,62 долл. Добавим к этому расход на хранение 3 Гб и получим в итоге хостинг всего за 8,4 долл. в месяц для СУБД, обслуживающей весьма и весьма нагруженный проект с очень быстрым временем отклика (единичные микросекунды). Кроме того, режим Reserved Capacity предоставляет существенные скидки на сервис DynamoDb, если он приобретается на период от одного до трёх лет.