CouchBase смешивается с Memcached, потеря большинства философий CouchDB и функциональности?
На данный момент, единственный способ, которым я работал с более новыми версиями CouchBase, через клиента memcached. Я использую Эрланг как язык программирования, и поэтому я схватил себя Erlang Memcached Клиент. Я заметил, что этот клиент сериализует и де-сериализует термины erlang (как ключ, так и значение), преобразуя их из и в двоичный файл с помощью 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. Единственный способ получить данные - это "ключ", каким бы вложенным ни был объект. С оригинальным диваном DB мы могли бы написать расширенные виды, карта уменьшить для поиска и управления JSON данные в базе данных e.т. c
3. Следовательно, мы не можем ясно использовать такие вещи, как:Диване Приложения и Оформление Документов С основанием дивана, как мы привыкли делать с Couch DB, потому что эти функции предназначены для обработки данных JSON в Couch.
вопросы
1. Я понимаю, что CouchBase смотрит на другой подход от CouchDB, однако, как разработчик я чувствую, что много было отняли у нас. Больше никаких диванных приложений, проектных документов, представлений, e.т. c ?
2. Возможно, я что-то не так здесь, может кто-нибудь, пожалуйста, покажите мне, как я все еще могу сделать все это с кушеткой, как я сделал с оригинальным диваном DB ?
3. Есть ли другой способ вставить, прочитать или обновить данные в Couch Base 1.8 и выше (используя erlang), кроме клиента Erlang memcached ? Это связано с тем, что существует сериализация данных, которая делает эти данные бесполезными для других технологий в том же проект, поскольку они не могут декодировать структуры данных Erlang
4. В многоязычном проекте, где у нас есть разработчики PHP, C++, Erlang, Ruby e.т. c. работая с одним и тем же базовым экземпляром Couch (Database), с сериализацией данных, как мы должны получать доступ и понимать данные во всех технологиях ?
кто-то помогает указать на изменения от CouchDB до основания дивана, объяснить, почему новое основание дивана так привязано к Memcached до точки, где мы должны использовать memcached клиенты, чтобы поговорить с CouchBase. Кроме того, если есть другой Erlang-to-CouchBase SDK, который может помочь мне говорить JSON (а не сериализованные данные) от и до диванной базы, я хочу наложить на него руки.
* * EDIT**
предположим следующее: CouchBase x86_64 1.8.0 и Erlang OTP R15B. Мне нужно работать с данными JSON в Couch Base, чтобы в большом многоязычном проекте наши приложения работали с одним и тем же набором данных без сериализации проблемы. Спасибо
3 ответов
существует большая разница между CouchDB и Couchbase, если я прав Couchbase использовать CouchDB для хранения данных, но не предлагают/представить представления и другие приятные функции CouchDB.
Я прошел через другой API (ruby, php) с веб-сайта Couchbase и документации сервера Couchbase, и я ничего не нашел о view или map-reduce. см. doc: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 и т. д. и исследуйте, действительно ли это соответствует вашим потребностям.
связь между Couchbase и CouchDB подробно рассматривается здесь:http://www.couchbase.com/couchdb
короче говоря, Couchbase нацелен на основной вариант использования NoSQL: большие данные, которые должны быть доступны для взаимодействия с конечным пользователем. Такие вещи, как хранение сеанса для таргетинга рекламы, хранение игровых данных для быстро растущих социальных игр. Или где-либо требования пользователей могут расти неожиданно.
Couchbase горизонтально масштабируется, CouchDB нет. Чтобы получить масштабируемость и скорость Couchbase предлагает, у нас есть шляпа, чтобы сократить некоторые функции людей, как в CouchDB. Это другой набор компромиссов,но общим знаменателем является JSON и модель индекса map reduce.
что касается Cyprien, ваш вопрос имеет реальный ответ, кроме "не используйте Couchbase."
Memcache позволяет гораздо больше типов данных, чем CouchDB. В частности, вы можете Memcache пустую строку, строку " { ", строку " 0 "или строку" {}". Только последний является допустимым объектом JSON, который можно использовать в качестве документа CouchDB. AFAIK способ работы Couchbase заключается в том, что если строка, которую вы устанавливаете или добавляете, является представлением JSON допустимого документа CouchDB, она сохраняет его как документ в CouchDB, в противном случае он сохраняет его как вложение. [zIt-это дизайнерское решение, с которым я не согласен (они могли просто вставить $value
ключ в документ CouchDB), но это имеет смысл, учитывая, что вы можете передавать очень большие объекты, фактические вложения, через интерфейс протокола.] Независимо от того,"$att_reason": "invalid_json"
ваш намек на то, что это происходит.
предстоящая версия Couchbase, 2.0, теперь в предварительном просмотре разработчика, предоставляет почти все CouchDB функциональность, за исключением диванных приложений (которые не имеют значения, если вы используете Erlang в любом случае). Поэтому, если вы хотите использовать это, вы захотите передать JSON объектов через интерфейс Memcache, но обратите внимание, что тогда вы потеряете атомарные ярлыки Memcache (вам нужно будет сделать сравнение и обмен, что требует дополнительного сетевого перехода).