Skip to content

Latest commit

 

History

History
117 lines (84 loc) · 3.86 KB

File metadata and controls

117 lines (84 loc) · 3.86 KB

5.6 NoSQL database

Una base de datos NoSQL proporciona un mecanismo para el almacenamiento y recuperación de datos que utilizan modelos de consistencia más debiles que las base de datos relacionales para lograr una escala más horizontal y una mayor disponibilidad. Algunos autores se refieren a ellas como "No sólo SQL" para enfatizar que algunos sistemas NoSQL permiten un lenguaje de consulta similar al SQL para ser utilizado.

Como el lenguaje C de siglo 21, Go tiene un buen soporte para bases de datos NoSQL, y las bases de datos NoSQL más populares incluyendo redis, mongoDB, Cassandra y Membase.

Redis

Redis es un sistema de almacenamiento clave-valor como Memcached, soporta string, list, set y zset(set ordenado) ya que evalua tipos.

Acá hay algunos drivers de base de datos de Go para redis:

Le hice un fork al ultimo y le corregí algunos bugs, lo uso en mi servicio para acortar URL(2 millones de PV cada día).

Vamos a ver cómo utilizar el driver al que le realicé el fork para operar la base de datos:

	package main

	import (
		"github.com/astaxie/goredis"
		"fmt"
	)

	func main() {
		var client goredis.Client
		
		// Set the default port in Redis
		client.Addr = "127.0.0.1:6379"
		
		// string manipulation
		client.Set("a", []byte("hello"))
		val, _ := client.Get("a")
		fmt.Println(string(val))
		client.Del("a")

		// list operation
		vals := []string{"a", "b", "c", "d", "e"}
		for _, v := range vals {
			client.Rpush("l", []byte(v))
		}
		dbvals,_ := client.Lrange("l", 0, 4)
		for i, v := range dbvals {
			println(i,":",string(v))
		}
		client.Del("l")
	}

Podemos ver que es muy fácil de operar redis en Go, y tiene un alto rendimiento. Su cliente de comandos es casi lo mismos que los mismo comandos que incorpora redis.

mongoDB

mongoDB (de "descomunal") es un sistema de base de datos orientada a documentos, de código abierto desarrollada y apoyada por 10gen. Es parte de la familia de los sistemas de base de datos NoSQL. En lugar de almacenar datos en tablas como se hace en una base de datos relacional "clásica", MongoDB guarda los datos estructurados como documentos JSON-like con esquemas dinámicos (MongoDB llama al formato BSON), por lo que la integración de datos en ciertos tipos de aplicaciones es más fácil y más rápido.

Figura 5.1 Comparación de MongoDB con Mysql

El mejor driver para mongoDB se llama mgo, y es posible que este en la librería estándar en el futuro.

Acá un ejemplo:

	package main
	
	import (
	    "fmt"
	    "labix.org/v2/mgo"
	    "labix.org/v2/mgo/bson"
	)
	
	type Person struct {
	    Name string
	    Phone string
	}
	
	func main() {
	    session, err := mgo.Dial("server1.example.com,server2.example.com")
	    if err != nil {
	        panic(err)
	    }
	    defer session.Close()
	
	    session.SetMode(mgo.Monotonic, true)
	
	    c := session.DB("test").C("people")
	    err = c.Insert(&Person{"Ale", "+55 53 8116 9639"},
	        &Person{"Cla", "+55 53 8402 8510"})
	    if err != nil {
	        panic(err)
	    }
	
	    result := Person{}
	    err = c.Find(bson.M{"name": "Ale"}).One(&result)
	    if err != nil {
	        panic(err)
	    }
	
	    fmt.Println("Phone:", result.Phone)
	}

Podemos ver que no hay grandes diferencias para operar la base de datos entre mgo y beedb, ambos están basados ​​en struct, esto es lo que se estila en Go.

Enlaces