2012-02-27 7 views
7

partir de ahora, la única manera que he trabajado con las nuevas versiones de CouchBase, es a través de un memcached Client. Yo uso Erlang como el lenguaje de programación y así me había agarrado un Erlang Memcached Client. Me di cuenta de que este cliente serializa y anula la serialización de los términos erlang (clave y valor) convirtiéndolos de y a binario usando erlang:term_to_binary/1 and erlang:binary_to_term/1 al enviar y recibir datos de memcached.

Durante la configuración de CouchBase, se nos pide que elija cubetas con memcached o cubetas de CouchBase (vbuckets). Ahora, elegí CouchBase (porque necesitaba persistencia). Comencé a interactuar con la configuración utilizando el cliente de Memcached de Erlang y está bien, guardo los términos de erlang y recupero los términos de erlang de la base de datos. Sin embargo, los problemas comienzan aquí:

1. Debido a la serialización de los datos, los objetos se reciben como archivos adjuntos. Aunque se envíen como JSON, se envían como datos binarios que no tienen ningún significado para CouchBase (¿o Memcached?) CouchBase mezclado con Memcached, ¿pérdida de la mayoría de las filosofías y funcionalidades de 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 Como resultado de esto, estos datos no se pueden buscar, manipular a través de CouchDB views. La única forma de obtener los datos es mediante "Clave", independientemente de lo anidado que esté un objeto. Con originales Couch DB, podríamos escribir Advanced Views, Map reduce para buscar y manipular datos JSON en el etc base de datos

3. Por lo tanto, no podemos utilizar claramente cosas como: Couch Apps y Design Documents con sofá Base como estamos acostumbrados a ver con Couch DB, porque estas funciones están destinadas al procesamiento de datos JSON dentro de Couch.

Preguntas
1. Entiendo que CouchBase está buscando un enfoque diferente de CouchDB, sin embargo, como desarrollador siento que nos han quitado mucho. No más aplicaciones de Couch, documentos de diseño, vistas, e.t.c?
2. Probablemente, estoy obteniendo algo mal aquí, ¿alguien puede por favor mostrarme cómo puedo hacer todo esto con Couch Base como lo hice con Couch DB original?
3. ¿Hay alguna otra forma de insertar, leer o actualizar datos en Couch Base 1.8 y superior, (usando erlang) que no sea un cliente de Memcached de Erlang? Esto se debe a que existe una serialización de datos que hace que estos datos sean inútiles para otras tecnologías dentro del mismo proyecto, ya que pueden no ser capaces de decodificar las estructuras de datos de Erlang
4. En un proyecto multilingüe donde tenemos Desarrolladores PHP, C++, Erlang, Ruby, etc. trabajando con la misma instancia de Couch Base (Base de datos), con la serialización de datos, ¿cómo se supone que debemos acceder y entender los datos en todas las tecnologías?

Alguien ayuda a señalar los cambios de CouchDB a Couch Base, explica por qué la nueva Couch Base está tan atada a Memcached a un punto donde tenemos que usar los clientes de Memcached para hablar con CouchBase. Además, si hay otro SDK de Erlang-to-CouchBase que pueda ayudarme a hablar JSON (y NO datos de serialización) desde y hacia Couch Base, deseo poner mis manos en él.

** EDITAR **
Supongamos lo siguiente: CouchBase x86_64 1.8.0 y Erlang OTP R15B. Necesito trabajar con datos JSON en Couch Base para que en un gran proyecto multilingüe, nuestras aplicaciones operen el mismo conjunto de datos sin tener problemas de serialización. Gracias

+0

Estoy enfrentando el mismo problema ya que json perfectamente válido se almacena como datos binarios en el servidor de la base de datos. – Swapnil

+0

Acabo de recurrir a CouchDB. –

Respuesta

1

Hay una gran diferencia entre CouchDB y Couchbase; si tengo razón, Couchbase usa CouchDB para almacenar los datos pero no ofrece/presenta las vistas y otras funciones agradables de CouchDB.

Revisé las diferentes API (ruby, php) del sitio web de Couchbase y la documentación del servidor de Couchbase y no encontré nada sobre view o map-reduce. ver doc: http://www.couchbase.com/docs/couchbase-manual-1.8.pdf

Couchbase se parece más a un servidor de memcache con una capa de persistencia alimentada por CouchDB, y tal vez no se ajuste a sus necesidades. Los datos que puede almacenar dentro pueden ser cualquier cosa, desde int hasta algo serializar como JSON, pero en este caso debe deserializarlo en todos los extremos.

¿Por qué está utilizando Couchbase en lugar de CouchDB? No tengo experiencia con las versiones anteriores de Couchbase, pero sé que estos nombres, incluso si son bastante similares, se refieren a diferentes aplicaciones y quizás valga la pena seguir buscando si realmente es en lo que estás pensando.

Editar enlace interesante: http://damienkatz.net/2012/01/the_future_of_couchdb.html leer los comentarios así, muchas cosas interesantes dentro.

Según el comentario, entiendo que Damien Katz está trabajando en este nuevo proyecto llamado Couchbase, pero no es la última versión de CouchDB, sino simplemente otra base de datos NoSQL.

Así que si estuvieras acostumbrado a CouchDB podrías usar la última versión de CouchDB. O si desea considerar cambiar a Couchbase, mire las características, la hoja de ruta para 2.0, etc. e investigue si realmente se ajusta a sus necesidades.

0

Con respecto a Cyprien, su pregunta tiene una respuesta real además de "no use Couchbase".

Memcache permite muchos más tipos de datos que CouchDB. Específicamente, puede Memcache una cadena vacía, la cadena "{", la cadena "0" o la cadena "{}". Solo el último es un objeto JSON válido que puede usar como documento CouchDB. AFAIK la forma en que funciona Couchbase es que si una cadena que SET o ADD es la representación JSON de un documento CouchDB válido, lo almacena como un documento CouchDB, de lo contrario lo almacena como un archivo adjunto. [zEs una decisión de diseño con la que no estoy de acuerdo (podrían haber insertado una clave $value en el documento de CouchDB) pero tiene sentido dado que podría pasar objetos muy grandes, archivos adjuntos reales, a través de la interfaz de protocolo. ] A pesar de todo, el "$att_reason": "invalid_json" es su sugerencia de que esto está sucediendo.

La próxima versión de Couchbase, 2.0, ahora en la vista previa de desarrollador, expone casi toda la funcionalidad de CouchDB, excepto las aplicaciones de Couch (que son irrelevantes si está utilizando Erlang de todos modos). Entonces, si quieres usar eso, querrás pasar JSON de objetos a través de la interfaz Memcache, pero ten en cuenta que luego pierdes los accesos directos atómicos de Memcache (necesitarías hacer una comparación y cambio, que requiere una red adicional). salto).

1

La relación entre Couchbase y CouchDB se trata en detalle aquí: http://www.couchbase.com/couchdb

En resumen, Couchbase está dirigido a la NoSQL principal de casos de uso: grandes volúmenes de datos que debe estar disponible para la interacción del usuario final. Cosas como el almacenamiento de sesiones para la orientación de anuncios, el almacenamiento de datos de juegos para juegos sociales de rápido crecimiento. O en cualquier lugar donde las demandas de los usuarios puedan crecer inesperadamente.

Couchbase es horizontalmente escalable, CouchDB no lo es. Para obtener la escalabilidad y la velocidad que ofrece Couchbase, tenemos el sombrero para recortar algunas de las características que a la gente le gusta en CouchDB. Es un conjunto diferente de compensaciones, pero el denominador común es JSON y el mapa reduce el modelo de índice.

Cuestiones relacionadas