Uno de los primeros problemas con que debemos lidiar en la Web 2.0 es la recuperación de datos para el usuario. ¿Qué nuevas capas de persistencia han sido desarrolladas para hacer frente al reto?
En las transparencias se hace una muy leve introducción a Apache CouchDB y Amazon SimpleDB.
Estas transparencias están basadas en unas confeccionadas por mi para un curso sobre Cloud Computing.
3. El problema
Escenario
o La Web 2.0 es todo datos
• Perfiles de usuario
• Mensajería
• Datos de terceros (grupos musicales, libros…)
• Datos emegentes (gustos)
• La Web 2.0 se basa en un gran número de datos
– > 20 tweets cada 2 segundos
– > 600 tweets / minuto
– > 36000 tweets / hora
– > 864000 tweets / dia
4. BBDD Orientadas a Documentos
Bases de Datos Relacionales
o MySQL, PostgreSQL, SQL Server, Oracle…
o Propósito más general => No dedicados a la
escalabilidad
o Estructuras de datos (esquemas) más estrictas
• Más seguridad.
• Más posibilidades.
• Más sobrecarga.
o Funcionalidad distribuida como anexo.
Necesidad de otro tipo de capa de persistencia
5. BBDD Orientadas a Documentos
BBDD Orientadas a Documentos
Basado en la metáfora de la hoja de cálculo de Amazon
o Base de datos => Conjunto de documentos
o Documento => Conjunto de pares clave/valor
6. BBDD Orientadas a Documentos
BBDD Orientadas a Documentos
o Uso intensivo de pares clave valor:
• Base de Datos = {identificador, documento}
• Documento = {nombre de campo, valor de campo}
o Pueden ser vistas como tablas hash
o Pares clave valor
• Muy usados en cloud computing
• Un buen ejemplo: El algoritmo Map / Reduce
7. BBDD Orientadas a Documentos
BBDD Orientadas a Documentos
o Optimizadas para datos accedidos mediante
clave primaria.
o Sin esquema
• Más eficiente.
• Menos mantenible.
o Ausencia de relaciones
• Facilidad para replicación de datos
• Dificultad para expresar modelos complejos
9. Características de CouchDB
Base de Datos Orientada a Documentos
o Revisiones:
• Los documentos no se sobreescriben al
modificarse
• Se crean revisiones a-la SVN
• Las revisiones desaparecen (solo sirven para
concurrencia)
o Adjuntos
• Se pueden adjuntar documentos (jpg, txt, pdf…)
10. Características de CouchDB
Motor de vistas mediante Javascript
o Funciones javascript que “emiten” resultados
function(doc)
{
emit(“key”, doc);
}
• Se devuelven pares clave/valor donde
los valores son documentos.
o Se usa para implementar consultas
complejas.
11. Características de CouchDB
Motor de vistas mediante Javascript
o Funciones “reduce”
• Se usan para generar resultados agregados
function (key, values, rereduce)
{
return sum(values);
}
12. Características de CouchDB
Base de datos “distribuida”
o Mecanismos para replicación de datos entre
instancias.
o Usado en entornos con miles de instancias.
o Diseñado desde el principio para ello.
o Basado en HTTP → Escalabilidad propia de
aplicaciones web.
• Pero...
o ¿Ejemplos?
13. Características de CouchDB
Basada en Servicios Web REST
o PUT → CREATE, INSERT
o GET → SELECT
o POST → CREATE, INSERT, UPDATE
o DELETE → DELETE
o COPY, MOVE...
o Comunicación mediante JSON.
• http://host/_all_dbs [quot;testingquot;,quot;blogquot;]
14. Jugando con CouchDB
Via http://host/_utils/
Crear Base de Datos
Crear documentos
Crear Vistas
15. Jugando con CouchDB
Accediendo a los datos:
o
http://host/_all_dbs : lista de Bds
o
http://host/blog_[nombre, apodo, nick...] :
Información de la BD
o
http://host/blog_[nombre, apodo, nick...]/_all_docs :
Lista de documentos
o
http://host/blog_[nombre, apodo, nick...]/[doc_id] :
Información del documento
16. Jugando con CouchDB
Creando Vistas:
o Creamos una vista temporal
o Podemos realizar pruebas
o La almacenamos con un nombre
17. Jugando con CouchDB
Vía programación
o Lenguaje de programación capaz de realizar
peticiones HTTP
o Por ejemplo: PHP 5 + cURL
18. Jugando con CouchDB
Vía programación
o Obtener datos
$ch = curl_init(quot;http://host/_all_dbsquot;);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$json = curl_exec($ch);
curl_close($ch);
$dbs = json_decode($json);
19. Jugando con CouchDB
Vía programación
o Obtener datos de una vista
$ch =
curl_init(quot;http://host/_view/group_by_author/authors?
group=truequot;);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$json = curl_exec($ch);
curl_close($ch);
$dbs = json_decode($json);
25. Características de Amazon
SimpleDB
Base de Datos Orientada a Documentos
o Base de Datos => Dominio
o Documento => Item
o Valores => Atributos
26. Características de Amazon
SimpleDB
API basada en servicios SOAP o REST
o Definición de servicios mediante WSDL
o Autenticación:
• Identificador de acceso + hash con una clave
secreta
• Certificado x.509
o Bibliotecas de desarrollo
27. Características de Amazon
SimpleDB
Escalabilidad
o Posibilidad de crear varios dominios.
o En manos de Amazon
• Sin costes
• Sin control
28. Jugando con Amazon SimpleDB
Interfaz de acceso
o Via extensión de Firefox
o http://code.google.com/p/sdbtool/
29. Jugando con Amazon SimpleDB
Vía programación
o Bibliotecas de desarrollo disponibles para
muchos lenguajes.
o Consumo directo de SOAP.
o En nuestro caso: C# .NET
o http://developer.amazonwebservices.com/connect/entry.jspa?exte
30. Jugando con Amazon SimpleDB
Vía programación
o Listar Dominios
ListDomainsRequest request = new ListDomainsRequest();
ListDomainsResponse response =
this.cliente.ListDomains(request);
response.ListDomainsResult.DomainName;
31. Jugando con Amazon SimpleDB
Vía programación
o Crear Dominios
CreateDomainRequest request = new
CreateDomainRequest();
request.DomainName = quot;Nombrequot;;
CreateDomainResponse response =
this.cliente.ListDomains(request);
response.ListDomainsResult.DomainName;
32. Jugando con Amazon SimpleDB
Vía programación
o Obtener Items
QueryRequest request = new QueryRequest();
request.DomainName =
this.cbDomains.SelectedItem.ToString();
QueryResponse response = this.cliente.Query(request);
33. Jugando con Amazon SimpleDB
Vía programación
o Todos los accesos siguen la misma
estructura
[Metodo a ejecutar]Request request = new [Metodo a
ejecutar]Request();
[Configurar Request]
[Metodo a ejecutar]Response response = this.cliente.
[Metodo a ejecutar](request);
35. Conclusiones
Sobre las BBDD Orientadas a
Documentos
o ¿Merecen la pena?
o ¿Sustitutas de BBDD Relacionales?
o ¿Las usaríais en proyectos?
o Problemas de CouchDB
o Problemas de Amazon SimpleDB
37. Conclusiones
Estas transparencias se publican bajo licencia
Creative Commons y se pueden redistribuir o
modificar bajo las siguientes condiciones:
1. Se dé reconocimiento al autor de estas
transparencias.
2. No se use con propósitos comerciales.
3. Se distribuya con la misma licencia.
Texto de la licencia:
http://creativecommons.org/licenses/by-nc-sa/3.0/