В настоящее время, единственный путь, я работал с новыми версиями 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, так что в большом многоязычном проекте наши приложения работают с одним и тем же набором данных без проблем с сериализацией. Спасибо
Я столкнулся с той же проблемой, что и отлично, json хранится в виде двоичных данных на сервере couchbase. – Swapnil
Я только что вернулся к CouchDB. –