Техническое: CouchDB и его применимость

В эти выходные мне сравнительно немного удалось поработать за компьютером, была уйма других дел, а вот краулеры и нагрузочные тесты на CouchDb как раз смогли отработать полностью.

За пару дней на мой небольшой домашний сервер удалось собрать информацию по доменам в зоне SU, корневые страницы, данные whois и так далее и теперь могу говорить о CouchDb с большей однозначностью.

Основное, пожалуй, то что движок позволяет делать очень быстрые запросы на добавление и получение отдельных документов по ключу. Для систем со стратегией работы с данными по CRD (Create, Read, Delete) движок весьма удобен, например, у него есть хороший потенциал в качестве использования как хранилища логов. А вот для CRUD в классическом понимании будут свои особенности, в частности то как CouchDb работает с версиями будет отрицательно сказываться на объёмах хранимых данных.

Открытый вопрос в том можно ли использовать CouchDb для хранения документов в виде версий. Сейчас CouchDb всегда создаёт новый экземпляр документа при любом изменении, но при запуске команды compact все старые версии удаляет.

Открытый вопрос тут в том какую стратегию использовать при хранении документов с версиями — использовать ли механизм ревизий CouchDb или нет. Вариант — это, например, изменение логики движка с возможностью указания постоянства хранения (флаг persist) для новый версий в тех случаях когда есть желание не потерять их при последующих запусках compact.

Для чего движок использовать точно неправильно, так это для хранения файлов. Корневые страницы примерно 30 000 сайтов у меня занимают 0.9 гигабайта, большая часть этого объёма создаётся за счёт необходимости их кодирования в base64.

А вот хранение метаданных обеспечивается очень удобно — за счёт того что всё в JSON можно использовать любые иерархии вложенных объектов, а также их списки. Например, это позволяет хранить ссылки в распакованном формате — с разделёнными префиксами и суффиксами доменов, элементов пути, параметров и так далее. Точно также HTTP заголовки можно хранить не отдельной SQL таблицей, а в виде перечня объектов (структур) вложенных в описание выгруженной страницы и, несмотря на то что можно реализовать схожее на SQL, тем не менее подобный механизм хранения вложенных структур очень удобен. При семантическом/онтологическом связывании данных — то чем я занимаюсь, это особенно важно, так как иной раз на один объект может приходится до десятка меток и хранение их в отдельной SQL таблице убивает производительность.

Точно также удобно использование механизма View — которые являются аналогом «материализованных вью» в SQL базах данных, с той лишь разницей что могут формироваться двумя функциями map/reduce и обслуживаться внешними серверами. Последнее особенно интересно и хотя я механизм ViewServer ещё не пробовал, но возможностей у его использования множество. К примеру, ViewServer с использованием реплик данных может позволить решить проблемы долгого выполнения запросов.

В совокупности как дешёвая и удобная альтернатива HBase продукт очень интересен, я скорее всего большую часть своих исследовательских проектов — выявление новостей (Скиур), геотаггинг, выявление SEO-ссылок, Социоранк буду переводить на CouchDB.

About This Author

  • http://edbond.name edbond

    Будут ли бенчмарки? Примеры map/reduce функций итд?

  • http://ivan.begtin.name ivbeg

    Примеры функций есть тут — http://ivbeg.livejournal.com/149100.html?thread=690540#t690540
    Бенчмарки для document-oriented баз довольно специфичны, некоторые цифры по производительности на реальных примерах я буду приводить с следующих постах.

  • stokito

    А под винды коуч собираются делать? Или уже?

  • stokito

    А под винды коуч собираются делать? Или уже?

  • http://ivan.begtin.name Ivan Begtin

    И давно.Just Google it — http://www.google.ru/search?q=couchdb+win32

Яндекс.Метрика