¡Couchbase Go SDK Developer Preview!

Me complace anunciar la primera versión preliminar para desarrolladores de nuestro SDK oficial de Go (gocb) hoy.

 

Mientras que en el pasado, hemos tenido el proyecto go-couchbase que proporciona acceso a muchas de las características de Couchbase, fue pensado principalmente para ser utilizado internamente en nuestra empresa. gocb marca la primera vista previa de una próxima versión diseñada y desarrollada específicamente para satisfacer los objetivos de los desarrolladores Go que utilizan Couchbase.

 

El proyecto gocb está implementado como un conjunto de métodos bloqueantes que pueden ser utilizados concurrentemente desde tantas goroutines como se desee. Se sugiere que distribuyas tu carga de trabajo a través de tantas goroutines como quepan dentro del diseño de tu aplicación para maximizar el paralelismo de la librería.

 

Puedes encontrar una referencia API para el proyecto gocb en: http://godoc.org/github.com/couchbaselabs/gocb/.

 

Realización de operaciones básicas

 

Consulta de vistas

 

Registro

Mientras que el registro que está disponible dentro de gocb está todavía en su infancia, puede proporcionar una gran cantidad de información útil para la depuración. Configurar gocbcore para que registre en la consola es bastante trivial usando un objeto logger incorporado. Asegúrate de llamarlo sólo una vez al principio de tu aplicación, ya que se asume que el logger es inmutable una vez que otros métodos son invocados.

 

Arquitectura del SDK de Go

La biblioteca gocb

La librería gocb es nuestra librería orientada al desarrollador, pensada para proporcionar una interfaz simple y fácil de usar a los usuarios. Esta biblioteca implementa una API de bloqueo que expone toda nuestra funcionalidad orientada al desarrollador.

 

La biblioteca gocbcore

La biblioteca gocbcore es nuestra biblioteca interna que proporciona toda la red y la funcionalidad de gestión inteligente del cliente. Esta biblioteca proporciona es utilizado por gocb internamente.

gocbcore implementa un método de despacho de operaciones mayormente sin bloqueo, dando a tu aplicación la capacidad de distribuir fácilmente la carga a través de tantos núcleos como servidores en tu cluster. Esto significa un mejor rendimiento, y la capacidad de utilizar con seguridad el cliente a través de tantas goroutines como desee sin incurrir en ninguna penalización de rendimiento.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Brett Lawson, Ingeniero de Software Principal, Couchbase

Brett Lawson es Ingeniero de Software Principal en Couchbase. Brett es responsable del diseño y desarrollo de los clientes Node.js y PHP de Couchbase, además de participar en el diseño y desarrollo de la biblioteca C, libcouchbase.

23 Comentarios

  1. ¿Debería utilizar gocb.NewViewQuery?

    vq := gocouchbase.NewViewQuery(\"dev_all\", \"by-id\").Limit(4)
    rows := bucket.ExecuteViewQuery(vq)

  2. Sólo otra pregunta, ¿es el SDK Golang capaz de conectarse al Sync Gateway?

    1. No. Actualmente en golang te conectarías a SG a través de la API REST de it\.

  3. No parece haber una función de desconexión. ¿Estoy en lo cierto al decir que sólo debo conectarme una vez, mantener esa conexión durante toda la vida de la aplicación, y que la conexión será liberada cuando la aplicación se apague?

    1. Esto es correcto. Mientras que tener una capacidad de desconexión será útil para algunos casos extremos, la forma adecuada de manejar las conexiones de Bucket es crearlas durante la inicialización de la aplicación y utilizar la misma instancia de toda la aplicación (los métodos de Bucket son seguros y performantes desde tantas goroutines como se considere necesario).

      1. ¿Hay alguna forma recomendada de cerrar la aplicación para asegurarse de que se cierra la conexión de Bucket subyacente, o se cerrará independientemente de la forma de cierre? Por ejemplo, caída del sistema, etc.

      2. Elhussein Ali junio 30, 2015 a 5:41 am

        pero que pasa si pongo las conexiones de los cubos en un pool con un tamaño inicial y maximo de pool
        y necesita cerrar las conexiones que excedieron el tamaño inicial !!.

        1. ¿Por qué poner las conexiones en un pool? La librería gocb es completamente segura y puede ser usada desde cualquier número de goroutines sin ningún problema de rendimiento.

          1. Gracias,
            pero necesito el pool para evitar la sobreutilización de los recursos del servidor,
            de cualquier manera creo que cerrar la conexión puede ser útil para ser exportado como un método.

          2. Oye, ¿podrías explicarnos cómo la agrupación de las instancias de Bucket reduciría el uso de recursos del servicio? De hecho, sospecho que el resultado podría ser el contrario, ya que las conexiones de Bucket son bastante caras en términos de recursos utilizados y están muy optimizadas para funcionar bien en numerosos hilos.

          3. Elhussein Ali julio 6, 2015 a 10:39 am

            gracias por la respuesta,
            pero me refiero a que se reducirá el uso de recursos para mi aplicación de servidor, no el servidor de base de datos
            de cualquier manera es un buen punto para apoyar el método de cierre

      3. Elhussein Ali junio 30, 2015 a 7:20 am

        ¿podemos utilizar el método "bucket.IoRouter().CloseTest()\" para cerrar la conexión correctamente?

        1. Este es un método de prueba que no estaba destinado a aparecer en el repositorio. Puede cerrar las conexiones correctamente, pero también puede hacer que toda su aplicación explote. Por favor, no lo utilice.

  4. ¿Esta biblioteca admite estrategias de reintento conectables y
    ¿modo fail-fast?

    1. Hola Paul,

      El SDK de Go no soporta ninguna de estas características por el momento. Aunque si pudieras explicar cómo verías esas características funcionando, estaría encantado de considerar añadirlas en un futuro próximo.

      Saludos, Brett

  5. Si una operación que persiste datos a un nodo sobre un
    falla la conexión en caso de fallo de nodo, ¿intentará el SDK automáticamente
    para establecer una conexión con el siguiente nodo promocionado? O, ¿debería mi
    lógica de la aplicación en lugar de capturar errores de conexión específicos, y responder
    ¿intentando explícitamente volver a conectarse?

    1. La aplicación intenta reintentar las operaciones de almacenamiento sólo mientras sea seguro hacerlo. En caso de fallo de un nodo una vez que la operación ya se ha enviado a la red, el error se propagará al usuario para que lo gestione, ya que en ese momento se desconoce el estado real de la operación y reintentarla automáticamente podría resultar problemático.

      1. Gracias. ¿Puede ofrecer un ejemplo de cómo tratar un error de este tipo?

  6. Me doy cuenta de que si añado un documento de la siguiente manera:

    bucket.Upsert(id, &myStruct, 0)

    Y luego invocar una vista según su ejemplo, la variable de fila contiene un ID que no tiene ninguna relevancia. No estoy seguro de dónde viene, pero no es igual a la ID que he establecido durante upsert.

    Si me vuelvo a conectar y vuelvo a invocar la vista, todo funciona como se esperaba.

    He intentado establecer un período de espera antes de llamar a la vista, en vano. Estoy ejecutando un solo nodo en una máquina DEV.

    1. En realidad, estoy seguro de que esto se debe al hecho de que la vista no es tan consistente como otras operaciones. El ID irrelevante parece ser el ID de un documento previamente borrado.

  7. Hola Brett, ¿soporta la librería multi-get? En lugar de recorrer los resultados de una vista individualmente, sería útil ofrecer una lista de IDs a un único recurso para recuperar valores en una sola llamada, según el SDK de Java.

  8. Hola Brett,

    ¿Cuál es la mejor estrategia a adoptar cuando una aplicación necesita múltiples conexiones Bucket?

  9. Alexey Poimtsev octubre 26, 2015 a 6:54 am

    Algo va mal con la biblioteca :(

    $ ir a buscar gopkg.in/couchbaselabs/gocb.v0

    # gopkg.in/couchbaselabs/gocb.v0

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... no se puede convertir cb (tipo ioCasCallback) a tipo gocbcore.UnlockCallback

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... no se puede convertir cb (tipo ioCasCallback) a tipo gocbcore.TouchCallback

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... no se puede convertir cb (tipo ioCasCallback) a tipo gocbcore.RemoveCallback

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... no puede convertir cb (tipo ioCasCallback) a tipo gocbcore.StoreCallback

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... no puede convertir cb (tipo ioCasCallback) a tipo gocbcore.StoreCallback

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... no puede convertir cb (tipo ioCasCallback) a tipo gocbcore.StoreCallback

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... no puede convertir cb (tipo ioCasCallback) a tipo gocbcore.StoreCallback

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... no puede convertir cb (tipo ioCasCallback) a tipo gocbcore.StoreCallback

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... no se puede convertir cb (tipo ioCtrCallback) a tipo gocbcore.CounterCallback

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... no se puede convertir cb (tipo ioCtrCallback) a tipo gocbcore.CounterCallback

    /Usuarios/alec/go/src/gopkg.in/couchbaselabs/gocb.v0... demasiados errores

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.