jueves, 4 de diciembre de 2014

NoSql

Nosql es el acronimo Not only Sql, las caracteristicas de la base de datos NoSQl son las siguientes:

  •  No usan SQL como el principal lenguaje de consultas.
  •  Los datos almacenados no requieren estructuras fijas
  •  No soporta Join y tampoco garantizan completamente ACID (atomicidad, consistencia, aislamiento y durabilidad).
  •  Escalan bien horizontalmente.


El teorema de CAP "es imposible para un sistema computacional distribuido ofrecer simultánamente las siguientes 3 garantías":

Consistencia : Todos los nodos ven los mismo datos al mismo tiempo.
Disponibilidad : Garantiza que cada petición recibe una respuesta acerca de si tuvo éxito o no
Tolerancia a la partición : El sistema continua funcionando a pesar de la pérdida de mensajes



Si queremos elegir una base de datos nosql, la cosa se pone un poco dificil porque actualmente hay 150 sistemas de base de datos nosql. ¿Cúal elegir? lo primero no todas las bases de datos nosql son iguales, podemos clasificar en 4 tipos diferentes:
  • Orientadas a documentos
  • Orientadas a columnas
  • Clave-valor
  • Grafos
Orientadas a documentos.

Almacena documentos en formatos XML, JSON o BSON, un ejemplo puede ser MongoDB

Orientadas a columnas.

Cada fila pude tener una configuración diferentes de columnas, un ejemplo puede ser HBase

Clave-valor

Una colección de pares clave/valor, un ejemplo pueder Redis

Grafos

Basadas en la teoría de grafos utilizan nodos y aristas para representar los datos almacenados, un ejemplo puede ser Neo4j

Como vemos tenemos un monton de tipos de bases de datos nosql para resolver cualquier tipo.
Actualemente la base de datos más usuada es mongodb debido a su modelo de datos y versatilidad


miércoles, 3 de diciembre de 2014

Cena de filósofos

Hola

Después de ver el tema de Thread safe, vamos a aplicar nuestro conocimientos para resolver un problema típico que el la cena de los filósofos.

El enunciado es el siguiente:

Cinco filósofos alrededor de una mesa pasan su vida comiendo o pensando. Cada filósofo tiene un plato de arroz y un palillo a la izquierda de su plato. Cuando un filósofo quiere comer, cogerá los dos palillos de cada lado del plato y comerá.





Si analizamos el problema podemos sacar las siguiente conclusión, solo pueden estar comiendo 2 filósofos a la vez:


  • El filósofo 0 puede comer con el filósofo 2 o con el 3.
  • El filósofo 1 puede comer con el filósofo 3 o con el 4.
  • El filósofo 2 puede comer con el filósofo 4 o con el 0.
  • El filósofo 3 puede comer con el filósofo 0 o con el 1.
  • El filósofo 4 puede comer con el filósofo 1 o con el 2.
 Con estas premisas he resulto el problema con la palabra reservada synchronized y clase Semaphore, como siempre el código esta subido a mi cuenta de github