2012-02-27 4 views
7

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

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

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

 
{ 
    "_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 views. Единственный способ получить данные - «ключ», однако вложенный объект может быть. С оригинальным Couch DB, мы могли бы написать Advanced Views, Map reduce для поиска и обработки данных в формате JSON в базе данных и т.д.

3. Таким образом, мы не можем четко использовать такие вещи, как: Couch Apps и Design Documents с Couch базы, как мы привыкли делать с 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), кроме клиента Ercang memcached? Это связано с тем, что существует сериализация данных, которая делает эти данные бесполезными для других технологий в рамках одного и того же проекта, поскольку они не могут декодировать данные Erlang. Структуры
4. В многоязычном проекте, в котором у нас есть PHP Developers, C++, Erlang, Рубин и др. работая с тем же экземпляром Couch Base (Database), с сериализацией данных, как мы должны получать доступ и понимать данные во всех технологиях?

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

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

+0

Я столкнулся с той же проблемой, что и отлично, json хранится в виде двоичных данных на сервере couchbase. – Swapnil

+0

Я только что вернулся к CouchDB. –

ответ

1

Существует большая разница между 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

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

Memcache позволяет использовать гораздо больше типов данных, чем CouchDB. В частности, вы можете Memcache пустую строку, строку «{», строку «0» или строку «{}». Только последний является допустимым объектом JSON, который можно использовать в качестве документа CouchDB. AFAIK, как работает Couchbase, заключается в том, что если строка, которую вы устанавливаете или добавляет JSON-представление действительного документа CouchDB, она хранит его как документ CouchDB, иначе он сохраняет его как вложение. [zIt - дизайнерское решение, с которым я не согласен (они могли бы просто вставить ключ $value в документ CouchDB), но это имеет смысл, учитывая, что вы можете передавать очень большие объекты, фактические вложения, через интерфейс протокола. ] Независимо, "$att_reason": "invalid_json" - это ваш намек на то, что это происходит.

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

1

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

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

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

Смежные вопросы