CouchDB — одна из самых известных документально-ориентированных баз данных с открытым исходным кодом, доступных в Интернете.
В этой статье описан мой опыт работы с CouchDB во время университетского проекта, после нескольких лет работы только с реляционными базами данных. У меня никогда не было времени попробовать NoSQL на работе, так как мы тесно связаны с реляционной базой данных и с ORM.
Этот опыт был всплеском: он не основан на тестировании и будет отброшен после завершения проекта. Это постепенный, жесткий, так как это эффективный способ изучения новой технологии.
Чем отличается CouchDB
Нет схемы, очевидно
Мне было трудно создавать данные осветителей вручную без эталонной схемы, автоматизированный скрипт, вероятно, был бы лучше. Разумеется, гибкость CouchDB заключается в том, что вам не нужно следовать схеме, подобной определению таблицы SQL, и вы можете добавлять поля / столбцы в отдельные документы по желанию.
Простая установка Linux
Как и в случае со стеком LAMP, с помощью одной команды вы можете получить работающий экземпляр CouchDB на вашем Linux-компьютере. Например, Ubuntu
sudo apt-get install couchdb
получит работающий сервер на порту 5984. Ubuntu уже использует CouchDB в производственной среде для синхронизации Ubuntu One.
Ключи больше не последовательные, а UUID или указаны вручную.
Эти идентификаторы предназначены для легкого распределения данных между несколькими узлами, но я не рассматривал это в этом учебнике. Последовательность натуральных чисел для идентификаторов удобна только в одноузловой базе данных.
Возможная последовательность
Ваши взгляды будут соответствовать вашему состоянию когда-нибудь (в неустановленный момент времени в будущем). Это определенно опасно для большинства корпоративных баз данных, но если вы управляете временной шкалой социальной сети, однако …
Значения не атомарны
В то время как в строке реляционной таблицы значение для столбца определяет строгий тип, вы можете сохранить то, что вы хотите, в качестве свойства документа. Например, массивы или другие объекты. Фактически, CouchDB рассматривает документ как значение JSON, так как он создан для Интернета.
CouchDB говорит HTTP
Множество драйверов, доступных для CouchDB, отражает тот факт, что протокол является почти универсальным, а не двоичным, как тот, что используется в обычных базах данных, таких как MySQL, Sql Server и Oracle. И, конечно, благодаря этому выбору дизайна CouchDB можно говорить из кода JavaScript.
Уменьшение карты
Представления слабо эквивалентны CouchDB SQL-запросов. Однако вы пишете их не с помощью декларативного языка, такого как SQL, а с парой функций map / lower, которая фактически следует парадигме Map / Reduce .
Теперь, почему вы хотите сделать эту работу низкого уровня? Во-первых, у вас будет гораздо больше гибкости в фильтрации данных и построении структуры данных, которую вы решите возвращать. Таким образом, гибкость, которая может быть опасна в чужих руках, отражается как на схеме, так и на уровне запросов.
Что еще более важно, map-Reduce — это то, как далеко вы можете продвинуться с общей парадигмой запросов, которая все еще по сути параллелизуема . Функции карты могут выполняться на разных узлах, а редукторы также могут быть размещены на разных узлах. При изменении поля число операций, выполняемых для обновления представлений в N документах, равно O (log N), поскольку измененный документ является единственным, который должен быть снова отображен, тогда как другие промежуточные (и неизмененные) результаты уже сохранены.
Этот более низкий уровень абстракции полезен для производительности, но он подразумевает, однако, что вам нужно подумать о запросах, прежде чем начинать заполнять вашу базу данных, потому что некоторые запросы могут быть невозможны или работать очень плохо с конкретной моделью данных. Последнее часто верно и для запросов на основе SQL.
CouchApp
CouchApp — это простой инструмент командной строки Python для управления разработкой веб-приложения, использующего CouchDB. Написание представлений непосредственно в Futon, phpMyAdmin из CouchDB, который запускается из коробки, является ужасной задачей, так как вам придется встраивать код JavaScript в строки.
Вместо этого с помощью CouchApp вы можете сгенерировать структуру ваших папок, записать функции, каждая из которых в своем собственном файле .js, с проверкой синтаксиса, а затем перенести ваше приложение в работающий экземпляр CouchDB.
Этот инструмент помещает простое приложение AJAX (HTML, JavaScript и CSS-код) в саму CouchDB , предоставляя также исходный код вместе с данными.
Я кодировал с помощью локального git-репозитория, а затем отправил свои примеры на локальный сервер с помощью push-сообщения couchapp $ databaseName (термин push совпадает с Git, но означает развертывание в CouchApp.) Я определенно посоветую вам использовать CouchApp, если вы хотите попробовать CouchDB без других хлопот.
Мои выводы
Мне нравится, как CouchDB и движение NoSQL в целом меняют предположения о том, что нам нужно из базы данных. У нас есть тяжелые, строго согласованные реляционные базы данных, а также простые, быстрые и в конечном итоге согласованные базы данных, такие как CouchDB. Поиск соответствия для наших вариантов использования теперь стал проще , чем когда-либо с тысячами других реляционных баз данных с открытым исходным кодом.