Обратите внимание, что новости можно получать по RSS.
X
-

Информационные технологии, LiveJournal cr_it - архив

14 ноября 2008, 14:51 (5882 дня назад, №8744)Google Datastore

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 - О разнице в подходах к реляционным и нереляционным базам данных


Опубликовано: Пётр Соболев

Случайная заметка

2678 дней назад, 20:4323 августа 2017 Crashplan (сервис для резервного копирования) закрывается. Я им пользовался, мне тоже прислали письмо. Испытываю смешанные чувства. С одной стороны он работал и несколько терабайт замечательно хранил годами. С другой, их софт на Java под виндами - просто ад (что нормально для софта на Java, но всё равно напрягает). Даже когда не бэкапит, ...далее

Избранное

2788 дней назад, 01:575 мая 2017 Часть 1: От четырёх до восьми Я люблю читать воспоминания людей, заставших первые шаги вычислительной техники в их стране. В них всегда есть какая-то романтика, причём какого она рода — сильно зависит от того, с каких компьютеров люди начали. Обычно это определяется обстоятельствами — местом работы, учёбы, а иногда и вовсе — ...далее

2300 дней назад, 20:305 сентября 2018 "Finally, we come to the instruction we've all been waiting for – SEX!" / из статьи про микропроцессор CDP1802 / В начале 1970-х в США были весьма популярны простые электронные игры типа Pong (в СССР их аналоги появились в продаже через 5-10 лет). Как правило, такие игры не имели микропроцессора и памяти в современном понимании этих слов, а строились на жёсткой ...далее