В скромную линейку корпоративных облачных сервисов Google, поддерживающих базы данных, входят всего два продукта: Google Cloud SQL (фактически РСУБД MySQL, доступная по схеме Database-as-a-Service), и Cloud Datastore — NoSQL-хранилище. Сегодня это минимальный набор, обязательный к предоставлению любым уважающим себя провайдером, и в данном случае создается впечатление, что Cloud Datastore предлагается компанией Google во многом для галочки и пиара. Этот сервис длительное время доступен в ограниченной предварительной версии, а планы и сроки его развития и превращения в полноценный продукт неизвестны. И тем не менее для некритичных проектов среднего масштаба Cloud Datastore смотрится вполне достойным вариантом.
Что такое Google Cloud Datastore?
Cloud Datastore — это масштабирующееся бессхемное хранилище, созданное на основе оригинальной системы BigTable, которую Google разработала для собственных нужд в середине 2000-х, а в 2008-м предоставила ее исходные тексты сообществу СПО. Cloud Datastore также свободно доступна на портале GitHub. Она полноценно поддерживает требования ACID к транзакционной системе, обеспечивает целостность запросов, репликацию базы между физически разнесенными дата-центрами, и даже обещается полное отсутствие простоев. Главное же, система умеет автоматически масштабироваться при увеличении интенсивности запросов. Взаимодействие с ней может вестись как из веб-консоли, так и посредством программных вызовов через HTTP с помощью JSON или Protocol Buffers API, из языков и фреймворков Java, Python, Ruby, Node.js и др. Так как система свободно доступна, можно развернуть локальный разработческий сервер, где эмулируется облачная среда Google на базе Java 7.
Формируем хранилище сущностей
База Cloud Datastore представляет собой своеобразное объектное хранилище, содержащее “сущности” (entity). Каждая сущность (или объект) состоит из нескольких полей, число которых в дальнейшем можно произвольно изменять, так как схемы данных в этом сервисе не применяются. Сущность создается и добавляется в хранилище кнопкой веб-консоли Create Entity. Для сущности уточняется категория (kind), дабы в дальнейшем можно было разделять тематические объекты. Каждая сущность обязательно сопровождается уникальным ключом, и произвольно формируются свойства — своеобразные “поля записи”, которым вручную задаются значения (рис. 1). Разным сущностям одной категории можно задавать совершенно разные свойства, как и положено NoSQL-системе, т. е. необязательно, чтобы перечни свойств каждой сущности совпадали (рис. 2). Допускается иерархическая организация сущностей.
Таким способом хранилище заполняется объектами (это возможно, конечно, и программным путем). Список сущностей доступен из консоли. Если ключ объекту не был задан вручную, он сформируется автоматически. Одну или несколько сущностей можно удалить кнопкой Delete. Кнопка Filters позволяет выполнять простые запросы к хранилищу — строить цепочки условий, проверяя значения на равенство или соответствие заданным диапазонам (рис. 3). Отмечу, что скорость считывания объектов из хранилища Google не зависит от размера результирующей коллекции — например, набор из 100 отобранных сущностей будет сформирован за то же время, что и набор из 1000 или 1 млн. объектов. Однако этот подход накладывает определенные ограничения на форму запросов: так, не допускаются соединения (joins), но зато активно применяются фильтры и сортировка.
Для ускорения доступа к значениям свойств сущностей применяется механизм индексации, который используют практически все запросы. Максимальный объем одной сущности ограничен 1 Мб, размер транзакции — 10 Мб, для сущности можно назначить не более 200 индексов (что фактически ограничивает количество ее свойств), да и для самих индексов отведено лишь 2 Мб на сущность.
Сколько платить за сущности Cloud Datastore
Деньги при эксплуатации Cloud Datastore снимаются в основном за суммарный объем базы, включая индексы. Первой гигабайт предоставляется бесплатно, за большие объемы тарификация взимается по расценкам PaaS-сервиса App Engine, в который Cloud Datastore пока включена как несамостоятельное решение. В зависимости от структуры хранимых данных (двоичные, типизированные, индексы) стоимость базы будет колебаться от 0,13 до 0,24 долл./мес. за 1 Гб. Кроме того, при считывании и записи сущностей будет взиматься 0,06—0,09 долл. за каждые 100 тыс. операции
Google Datastore или Amazon DynamoDb?
Главный минус Cloud Datastore в том, что это решение пока не слишком зрело, предлагается в предварительной версии, а конкретные технически характеристики неизвестны. В самостоятельный продукт Cloud Datastore не вынесена, а биллинг осуществляется в рамках App Engine. По этой причине административное сопровождение из веб-консоли не реализовано полноценно и пока частично ведется из консоли App Engine.
Amazon между тем уже вовсю эксплуатирует два коммерческих NoSQL-решения. Но если петабайтное хранилище Amazon RedShift находится в иной нише (оно весьма тяжеловесно и подразумевает высокий порог входа, требуя множества специфических системных, проектировочных и программистских знании), то более легковесная Amazon DynamoDb — это прямой соперник Cloud Datastore, и сравнение тут получается не в пользу Google. Так, официальные характеристики Cloud Datastore пока не предоставляются, а вот время отклика DynamoDB практически никогда не превышает 10 мс, в качестве же накопителей используются скоростные флэш-диски. Очень хороши и возможности интеграции Amazon: доступ к DynamoDB организуется, например, визуальными мастерами Visual Studio, экспорт и импорт данных возможен из веб-консоли, а также предоставляется сервис комплексной аналитики по таблицам DynamoDB через Elastic MapReduce (облачный Hadoop) с возможностью подключения РСУБД Amazon RDS.
Оценить различия в стоимости сложнее: оплата за DynamoDB взимается не за объем базы данных, а пропорционально интенсивности обращений (что логично, коли система позиционируется как неограниченно масштабируемая), и для большинства типовых задач с разумной нагрузкой, обрабатывающих несколько гигабайтов данных, платить придется примерно 10 долл./мес. За Cloud Datastore потребуется наоборот оплачивать дисковое пространство и сервер в рамках App Engine, но порядок цен будет скорее всего аналогичным.
Несмотря на подобные минусы, сама по себе Cloud Datastore, без сомнения, технически вполне серьезная, быстрая, надежная и стабильная система и вполне подойдет для проектов как минимум среднего размера. Кроме того, не исключено, что в детальных нагрузочных тестах Cloud Datastore покажет лучшее быстродействие, нежели конкуренты, о чем уже сообщали независимые тестовые лаборатории.