CouchBase, смешанный с Memcached, утратил большую часть философии и функциональности CouchDB? - PullRequest
7 голосов
/ 27 февраля 2012

На данный момент единственный способ, которым я работал с более новыми версиями CouchBase , - через memcached Client . Я использую Erlang в качестве языка программирования, поэтому я взял себе Erlang Memcached Client . Я заметил, что этот клиент сериализует и десериализует термины эрланга (как ключ, так и значение) путем преобразования их из двоичного кода в двоичное с использованием erlang:term_to_binary/1 and erlang:binary_to_term/1 при отправке и получении данных из memcached .

При настройке CouchBase нас просят выбрать либо корзины memcached, либо корзины CouchBase (vbuckets). Теперь я выбрал CouchBase (потому что мне нужно было постоянство). Я начал взаимодействовать с установкой, используя клиент erlang memcached, и это нормально, я сохраняю термины erlang и возвращаю термины erlang из базы данных. Однако проблемы начинаются здесь:

1. Из-за сериализации данных объекты принимаются как вложения. Даже если они отправляются в виде JSON из Erlang, они отправляются как двоичные данные, которые не имеют никакого значения для CouchBase (или Memcached?)

{ 
    "_id": "mykey",
    "_rev": "1-000010fb1a2b02ef0000000d59960000",
    "$flags": 38489, 
    "$expiration": 0,
    "$att_reason": "invalid_json",
    "_attachments": {
    "value": {
                "content_type": "application/content-stream",
                "revpos": 2,
                "digest": "md5-n3mJhf2kKVQtkIunIbCJZQ==",
                "length": 13,
                "stub": true
            }
        }
    }

2. В результате этого эти данные не могут быть найдены и обработаны с помощью представлений CouchDB . Единственный способ получить данные - это «Ключ», однако вложенный объект может быть. С оригинальной Couch DB мы могли бы написать Advanced Views, Map Reduce для поиска и обработки данных JSON в базе данных e.t.c

3. Следовательно, мы не можем четко использовать такие вещи, как: Couch Apps и Design Documents с Couch Base, как мы привыкли делать с Couch DB, потому что эти функции предназначены для обработки данных JSON в Couch.

Вопросы
1. Я понимаю, что CouchBase смотрит на подход, отличный от CouchDB, однако, как разработчик, я чувствую, что многое у нас отняли. Нет больше Couch Apps, Design Docs, Views, e.t.c?
2. Возможно, я что-то здесь не так, может кто-нибудь показать мне, как я все еще могу делать все это с Couch Base, как я делал с оригинальным Couch DB?
3. Есть ли другой способ вставки, чтения или обновления данных в Couch Base 1.8 и выше (с использованием erlang), кроме клиента memcached Erlang? Это связано с тем, что существует сериализация данных, которая делает эти данные бесполезными для других технологий в рамках того же проекта, поскольку они могут не иметь возможности декодировать структуры данных Erlang
4. В многоязычном проекте, где у нас есть разработчики PHP, C ++, Erlang, Ruby e.t.c. работая с одним и тем же экземпляром Couch Base (база данных), с сериализацией данных, как мы должны получать доступ и понимать данные во всех технологиях?

Кто-то помогает указать на изменения с CouchDB на Couch Base, объясните, почему новая Couch Base так привязана к Memcached, что мы вынуждены использовать клиенты memcached для общения с CouchBase. Кроме того, если есть еще один Erlang-to-CouchBase SDK, который может помочь мне передавать JSON (а НЕ сериализованные данные) с и на Couch Base, я хочу взять его на руки.

** РЕДАКТИРОВАТЬ **
Предполагается следующее: CouchBase x86_64 1.8.0 и Erlang OTP R15B. Мне нужно работать с данными JSON в Couch Base, чтобы в большом многоязычном проекте наши приложения работали с одним и тем же набором данных без проблем с сериализацией. Спасибо

Ответы [ 3 ]

1 голос
/ 07 августа 2012

Отношения между Couchbase и CouchDB подробно описаны здесь: http://www.couchbase.com/couchdb

Короче говоря, Couchbase нацелен на основной сценарий использования NoSQL: большие данные, которые должны быть доступны для взаимодействия с конечным пользователем. Такие вещи, как хранилище сеансов для таргетинга рекламы, хранилище игровых данных для быстрорастущих социальных игр. Или в любом месте, где требования пользователей могут неожиданно возрасти.

Couchbase горизонтально масштабируется, CouchDB - нет. Чтобы получить масштабируемость и скорость, предлагаемые Couchbase, мы должны сократить некоторые функции, которые есть в CouchDB. Это другой набор компромиссов, но общим знаменателем является JSON и модель индекса сокращения карты.

1 голос
/ 01 марта 2012

Существует большая разница между CouchDB и Couchbase, если я прав, Couchbase использует CouchDB для хранения данных, но не предлагает / не представляет представления и другие приятные функции CouchDB.

Я прошел через разныеAPI (ruby, php) с веб-сайта Couchbase и документация сервера Couchbase, и я не нашел ничего о просмотре или уменьшении карты.см. документ: http://www.couchbase.com/docs/couchbase-manual-1.8.pdf

Couchbase больше похож на сервер memcache с постоянным слоем, работающим на CouchDB, и, возможно, он не соответствует вашим потребностям.Данные, которые вы можете хранить внутри, могут быть любыми, от int до чего-то сериализованного, например, JSON, но в этом случае вам придется десериализовать его со всех концов.

Почему вы используете Couchbase вместо CouchDB?У меня нет опыта работы с более старыми версиями Couchbase, но я знаю, что эти названия, даже если они очень похожи, относятся к разным приложениям и, возможно, стоит заглянуть дальше, если это действительно то, о чем вы думаете.

Редактировать Интересная ссылка: http://damienkatz.net/2012/01/the_future_of_couchdb.html читать комментарии, много интересного внутри.

Из комментария я понимаю, что Дэмиен Кац сейчас работает над этим новым проектом под названием Couchbase, но это не последняя версия CouchDB, а просто еще одна база данных NoSQL.

Так что, если вы привыкли к CouchDB, вы можете просто использовать последнюю версию CouchDB.Или, если вы хотите подумать о переходе на Couchbase, посмотрите на функции, план действий для 2.0 и т. Д. И выясните, действительно ли он соответствует вашим потребностям.

0 голосов
/ 03 июля 2012

Что касается Cyprien, у вашего вопроса есть реальный ответ, кроме "не используйте Couchbase".

Memcache поддерживает гораздо больше типов данных, чем CouchDB. В частности, вы можете записать в Memcache пустую строку, строку «{», строку «0» или строку «{}». Только последний является допустимым объектом JSON, который вы можете использовать в качестве документа CouchDB. AFAIK способ, которым работает Couchbase, заключается в том, что если строка, которую вы УСТАНАВЛИВАЕТЕ или ДОБАВЛЯЕТЕ, является представлением JSON действительного документа CouchDB, она сохраняет его как документ CouchDB, в противном случае она сохраняет его как вложение. [zЭто решение о дизайне, с которым я не согласен (они могли просто вставить ключ $value в документ CouchDB), но это имеет смысл, учитывая, что вы можете передавать очень большие объекты, реальные вложения, по протоколу интерфейс.] Независимо от того, "$att_reason": "invalid_json" это ваш намек, что это происходит.

Предстоящая версия Couchbase 2.0, которая теперь находится в предварительном просмотре для разработчиков, предоставляет практически все функциональные возможности CouchDB, за исключением приложений Couch (которые не имеют значения, если вы в любом случае используете Erlang). Поэтому, если вы хотите использовать это, вам нужно передать JSON объектов через интерфейс Memcache, но учтите, что тогда вы потеряете атомарные ярлыки Memcache (вам нужно будет выполнить сравнение и обмен, что требует дополнительной сети). хмель).

...