На данный момент единственный способ, которым я работал с более новыми версиями 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, чтобы в большом многоязычном проекте наши приложения работали с одним и тем же набором данных без проблем с сериализацией. Спасибо