Вопрос о нереляционных базах данных (NoSQL) - PullRequest
5 голосов
/ 12 апреля 2010

Хотя я еще не использовал ни одну из новых баз данных NoSQL, я пытался держать себя в курсе, читая статьи Википедии, блоги и заглядывая в некоторые документы по базам данных NoSQL.

Я только что (пере) прочитал выпуск php | architect за август 2009 года, в частности статью о базах данных, не связанных с отношениями, и несколько вопросов, которые возникли у меня в голове, я понимаю, что статья довольно легкая на эту тему но этого было достаточно, чтобы запутать меня ...

CouchDB

Мой главный вопрос относительно CouchDB: почему так много рекламы? . Из того, что я понял, CouchDB предоставляет веб-сервис, который позволяет создавать базы данных и документы внутри базы данных, документы могут иметь несколько JSON-кодированных атрибутов, а также иметь специальный атрибут _id и _rev для отслеживания изменений документа.

Я действительно не суетюсь по этому поводу, несколько лет назад для любимого проекта я кодировал аналогичную (?) Систему для хранения документов, и структура была примерно такой:

documents/
  document-name/
    (revision) timestamp/
      (contents) md5-hash.txt
        PHP Serialized Data

Я уверен, что мне не хватает чего-то очень фундаментального, иначе (с точки зрения разработчика PHP) это будет иметь те же преимущества, что и CouchDB, и будет быстрее - не нужно кодировать и декодировать JSON.


Amazon SimpleDB

Теперь у этого действительно у меня кружится голова ... Автор (Рассел Смит) приводит следующий пример:

$sdb->putAttributes('phparch', 'may', array('title' => array('value' => 'May 2009'), 'have' => array('value' => false)));
$sdb->putAttributes('phparch', 'june', array('title' => array('value' => 'June 2009'), 'have' => array('value' => true)));
$sdb->putAttributes('phparch', 'july', array('title' => array('value' => 'July 2009'), 'have' => array('value' => true)));

Затем он говорит, что Amazon теперь поддерживает SQL-подобный интерфейс, а затем выполняет следующий запрос:

$sdb->select('phparch', 'SELECT * FROM phparch WHERE have = "1"');

Он не приводит аналогичного примера того, как выполнить этот запрос в CouchDB (однако он оставляет некоторые намеки на Views и Map / Reduce), но я полагаю, что это также возможно, поэтому мой вопрос: как Amazon (и CouchDB) делают это?

Моим первым предположением будет то, что они открывают все документы (возможно, в распределенной среде), а затем применяют операцию сокращения для фильтрации документов, атрибуты которых не соответствуют критериям поиска, но не будут не слишком ли это дорого (процессор и дисковый ввод / вывод) даже при параллельных вычислениях?


Я знаю, что игнорирую некоторые важные вещи, такие как распределение, согласованность и так далее, но я просто пытаюсь понять самые основные внутренние принципы работы хранилищ NoSQL.

PS: Кроме того, кто-нибудь может объяснить, почему CouchDB и Amazon SimpleDB созданы с использованием Erlang?

1 Ответ

3 голосов
/ 12 апреля 2010

суета вокруг nosql сводится к индексации, доступности и масштабируемости. Индексирование - это то, что позволяет ориентированным на документы хранилищам НЕ открывать все документы, если вы хотите получить те, у которых есть = 1. Доступность и масштабируемость позволяют этим системам легко масштабироваться и быть надежными в условиях ненадежного оборудования.

erlang разработан для многопроцессорных систем и поэтому идеально подходит для распределенных систем.

...