Google Datastore является одним из сервисов, предоставляемых в рамках хостинга Google App Engine. Это нереляционная база данных, построенная на базе так называемой Bigtable ("A BigTable is a sparse, distributed, persistent multi-dimensional sorted map"). По ряду признаков - аналог и прямой конкурент Amazon SimpleDB.
В качестве лирического отступления: разница в подходах заключается в том, что Amazon предлагает сервисы по-отдельности и только за деньги, а Google - сразу всё вместе и бесплатно (на начальном этапе, во всяком случае). Правда, Amazon пока привлекателен наличием хранилища файлов S3 (Google только обещает) и службы обмена сообщениями SQS. Кроме того, хостинг у них не завязан на конкретный язык и платформу.
Поверх Google Datastore реализована уже упоминавшаяся Google Base, равно как Google Base, Google Docs,Google Spreadsheet, Google Search, Google Maps и другие сервисы.
- Понятие "типы данных" существует. В частности, есть "ключ" содержащий ссылку на другой объект, что позволяет создавать связи. Есть text, blob (в которых можно хранить файлы до 1мб размером) и list, который позволяет (как и в SimpleDB) хранить в одном свойстве несколько значений.
- Как и в SimpleDB каждый объект может иметь свой независимый набор свойств.
- Агрегатные функции типа COUNT() не предусмотрены (принципиальный вопрос структуры базы)
- Ограничение по количеству записей выдаваемых на любой запрос - 1000 (плюс еще ограничение 1000 на offset).
- Ограничение хостинга на 2гб исходящего трафика в сутки
- Собственно, большая часть существующих ограничений явно задумана так, чтобы заставить разработчика писать программы, которые система сможет эффективно распараллеливать. Как с точки зрения хранения, так и с точки зрения вычислений/обработки.
- Транзакции: определяется последовательность операций который нужно выполнить в рамках транзакции (в рамках одной транзакции только операции над одной строкой базы!). Если хотя бы одна операция терпит неудачу, результаты всех операций отменяются автоматически.
- Интересно реализовано (в API для Python) помещение объектов в базу. Описывается класс прямо на Питоне (с указанием для каждого свойства нужных типов, а заодно и ограничений для присваиваемых значений). Это называется "модель".
Создаётся объект этого класса, инициализируется нужными значениями, после чего помещается в базу методом put().
Пример:
class Person(db.Expando):
first_name = db.StringProperty()
last_name = db.StringProperty()
hobbies = db.StringListProperty()
p = Person(first_name="Albert", last_name="Johnson")
p.hobbies = ["chess", "travel"]
p.chess_elo_rating = 1350
p.travel_countries_visited = ["Spain", "Italy", "USA", "Brazil"]
p.travel_trip_count = 13
p.put()
people = db.GqlQuery("SELECT * FROM Person WHERE chess_elo_rating < :1", 50)
- Всем создаваемым объектам система автоматически присваивает уникальные id
- Есть тип reference, можно указывать ссылку на другой объект. Причём, при указании такой ссылки у объекта на который ссылаемся, автоматически появляется свойство со списком всех ссылающихся на него объектов (!)
- Язык запросов GQL чисто похож на SQL. По сути это уступка тем кто переходит с реляционных баз данных (чтобы людей не пугать). Реально этот GQL - это надстройка над гугловским Query .
Пример GQL:
q = db.GqlQuery("SELECT * FROM Person " +
"WHERE last_name = :1 AND height < :2 " +
"ORDER BY height DESC",
"Smith", 72)
Само собой, JOIN'ов не существует в принципе.
- text и blob - не индексируются. Остальное индексируется само.
- Запись намного медленнее чтения (и чтение тоже небыстрое, по сравнению с известными реляционными базами)
В итоге, по сумме факторов, Google Datastore кажется мне более привлекательной, чем SimpleDB. Но что касается хостинга, то Google App Engine - вещь конечно сильно в себе, по сравнению с Amazon EC2. Может некоторых успокоит что следующим поддерживаемым языком после Python'a станет Java, но по сути это не сильно изменит ситуацию.
Чтобы работать с Google Datastore и App Engine, известные решения придётся продумывать с нуля и совершенно иначе, чем обычно. Выигрыш - в масштабируемости. Т.е. запариваться имеет смысл для проектов с очень большой (предполагаемой) посещаемостью.
http://en.wikipedia.org/wiki/Entity-Attribute-Value_model - Entity-attribute-value model (EAV), also known as object-attribute-value model
http://en.wikipedia.org/wiki/Tuple_space - tuple space is an implementation of the associative memory paradigm for parallel/distributed computing
http://groovie.org/2008/04/13/google-datastore-and-the-shift-from-a-rdbms - Google Datastore and the shift from a RDBMS
http://labs.google.com/papers/bigtable-osdi06.pdf - Google Big Table
http://en.wikipedia.org/wiki/Entity-Attribute-Value_model - Entity-attribute-value model
http://aralbalkan.com/1504 - Про квоты и ограничения GAE
http://techwork.ru - Различные алгоритмы и решения в GAE
http://labs.google.com/papers/mapreduce.html - MapReduce: Simplified Data Processing on Large Clusters
http://video.google.com/videoplay?docid=7278544055668715642&hl=en - BigTable: A Distributed Structured Storage System
http://oakleafblog.blogspot.com/2008/04/comparing-google-app-engine-amazon.html - Сравнение Google Datastore, Amazon SimpleDB и Microsoft SQL SDS.
http://artamonov.ru/2008/02/21/obrabotka-dannyx-podxod-mapreduce/ - Map Reduce
http://highscalability.com/how-i-learned-stop-worrying-and-love-using-lot-disk-space-scale - О разнице в подходах к реляционным и нереляционным базам данных