martes, 18 de noviembre de 2014

Thread Safe

Hola

Hoy voy hablar sobre thread safe, es algo que siempre escuchamos cuando programamos, pero ¿Qué es thread safe?

Una clase Java es Thread safe cuando su compartamiento no sé ve interferidor y modificado por otros hilos de forma concurrente.

En una imagen se ve mejor esta definición (mía):

Como vemos tenemos dos hilos que accede al mismo objecto Counter. Si counter es thread safe su comportamiento no sé vee alterado sí llega primero thread 1 y despues thread 2.

Java tiene varios mecanismo de hacer thread safe una clase:
  • Uso de la palabra reservada synchronized
  • Uso de la palabra reservada volatile
  • Uso de la clase ThreadLocal
  • Uso de la clase Lock
  • Uso de la clase Semaphore
Un error que se produce con el uso de sincronización es el bloqueo mutuo (dead Lock), como siempre esto se ve mejor con un ejemplo.

lunes, 17 de noviembre de 2014

ElasitcSearch

Hola

En esta entrada vamos a usar como almacen de datos una base de datos de tipo NoSQL, El primero que vamos a usar es ElasticSearch un proyecto de Apache que el corazón de elasticSearch es Lucene.

Como la mayoría de gente ha trabajado con base de datos relacional vamos hacer una comparativa de conceptos entre los dos sistemas:

SQL ElasticSearch
Esquema Indice
Tabla Tipo
Fila Documento
Columna Propiedad

ElasticSearch esta  hecho en java completamente, esta basado en documentos en formato JSON, se puede escalar horizonatalmente, permiter crear un cluster de nodos, tambien nos ofrece una api rest para acceder a los datos:

server:port/indice/tipo/id

ElasticSearch cuando se guarda un documento, ademas de guardar las propiedades dicho documento se añade las siguientes:
  • _id : valor único de 22 caracteres en base 64
  • _version : indica el número de modificaciones ha sufrido el documento
  • _index : indica a que indice pertenece el documento
  • _type : indica a que tipo pertenece el documento
Con los conceptos claros procedemos ha crear un proyecto que nos permita hacer las operaciones CRUD, como siempre el proyecto se encuentra en github