Translate

Mostrando las entradas con la etiqueta db4o. Mostrar todas las entradas
Mostrando las entradas con la etiqueta db4o. Mostrar todas las entradas

lunes, 2 de septiembre de 2013

DB-Engines Ranking

Existe un ranking de base de datos, en realidad de almacenes de datos porque hay del tradicional entidad-relación al NoSQL. Bien no se de donde toman los datos pero se ve coherente.

Dejo link:
http://db-engines.com/en/ranking

sábado, 1 de octubre de 2011

NoSQL



Hoy en día ya paso la furia por NoSQL, podemos decir que esta en un crecimiento constante. NoSQL es un movimiento que surgió dado requerimientos no funcionales de aplicaciones que no podian ser subsanados con bases relacionales. Las bases NoSQL sacrificaron requerimientos de integridad de datos por requerimientos de escalabilidad y performance.
NoSQL es una etiqueta en la cual entran todas las bases no relacionales. Existen gran cantidad de diferentes soluciones etiquetadas como NoSQL,

  • Bases orientadas a grafos (Neo4j) orientada a busquedas en grafos.
  • Bases documentales (MongoDb, Apache CouchDB) guardan estructuras complejas de datos; y pueden guardar diferentes estructuras.
  • Bases Clave-Valor (Voldemort): se guardan los datos por clave-valor.
  • Bases basadas en columnas (Apache Cassandra, BigTable, HBase)
  • Y hasta bases orientadas a objeto como db4o son llamadas NoSQL.

Antes de utilizar un producto NoSQL debe tener en cuenta que cada producto fue hecho para una realidad diferente y para atacar un problema particular; es menos generico que las bases relacionales. Por lo tanto debe ser cuidadoso y analizar bien sus requerimientos no funcionales para dar justo en la tecla.
No hay que tener miedo de mezclar bases NoSQL con base de datos relacionales dado que en una misma aplicación podemos tener problemas diferentes y por lo tanto soluciones diferentes.
Las Bases NoSQL funcionan y han solucionado muchos problemas, es hora de probarlas y utilizarlas si se justifica.  

sábado, 26 de septiembre de 2009

db4o

DB4O es un novedoso motor de base de datos orientada a objetos. Sus siglas se corresponden con la expresión "DataBase 4 (for) Objects", que a su vez es el nombre de la compañía que lo desarrolla: db4objects, Inc.

DB4O es:

  • Nativa a Java y .NET

  • 100% orientada a objetos, sin mapeo objeto-relacional

  • Diseñada para uso embebido

  • De código abierto y libre bajo la GPL

Las claves innovadoras de este producto es su alto rendimiento (sobre todo en modo embebido) y el modelo de desarrollo que proporciona a las aplicaciones para su capa de acceso a datos, el cual propugna un abandono completo del paradigma relacional de las bases de datos tradicionales.

De este modo, tenemos las siguientes consecuencias directas resultantes de este nuevo paradigma:

  • Deja de existir un lenguaje SQL de consultas/modificaciones para pasar a crearse sistemas de consulta por métodos delegados y actualización/creación/borrado automático de entidades mediante código compilable.

  • Se elimina la necesidad de representar el modelo de datos de la aplicación en dos tipos de esquemas: modelo de objetos y modelo relacional. Ahora el esquema de datos del dominio viene representado por la implementación que se realice del diagrama de clases.

  • Se consigue evitar el problema del Object-Relational Impedance Mismatch sin sacrificar el rendimiento que los mapeadores objeto-relacionales sufren actualmente para llevar a cabo el mismo objetivo.

La mayor clave del éxito que está teniendo este motor de base de datos frente a otros competidores que han desarrollado tecnologías similares, es que se ha optado por un modelo de licenciamiento idéntico al utilizado por empresas como MySQL: licencia dual GPL/comercial. Es decir, si se quiere desarrollar software libre con esta librería, su uso no conlleva ningún coste por licencia; sin embargo si se desea aplicar a un software privativo, se aplica otro modelo de licenciamiento concreto.

Actualmente este producto funciona como una librería para dos tipos de plataformas de desarrollo: Java y.NET (tanto la implementación de Microsoft como la de Mono).

Dejo unos links que contienen todo lo que hay que saber de este producto:

http://javahispano.org/contenidos/es/db4o/;jsessionid=E73763B425065DA17545394C602338EA

http://www.programacion.com/java/articulo/jap_persis_db4o/

http://developer.db4o.com/forums/storage/15/33746/50-54%20code34%20Architecture.pdf

Y para todos los araganes que no quieren buscar o leer, dejo un ejemplito:

La clase Player

public class Player {         

protected String name;
protected int squadNumber;
protected float battingAverage;
protected Team team;

public Player(String name, int squadNumber, float battingAverage){
this.name = name;
this.squadNumber = squadNumber;
this.battingAverage = battingAverage;
}

//Geters and seters

public String toString() {
return name + ":" + battingAverage;
}
}

La clase Pitcher

public class Pitcher extends Player {

private int wins;

public Pitcher(String name, int squadNumber, float battingAverage, int wins) {
super(name,squadNumber,battingAverage);
this.wins = wins;
}

//Geter y seter para wins

public String toString() {
return name + ":" + battingAverage + ", " + wins;
}
}

La clase Team

import java.util.List;

import java.util.ArrayList;

public class Team {

private String name;
private String city;
private int won;
private int lost;
private List players;

public Team(String name, String city, int won, int lost){
this.name = name;
this.city = city;
this.won = won;
this.lost = lost;
this.players = new ArrayList();
}

public void addPlayer(Player p) {
players.add(p);
}

// Geters y seters

public String toString() {
return name;
}
}

Primero, creamos algunos datos de prueba con los que trabajar:

// Create Players

Player p1 = new Player("Barry Bonds", 25, 0.362f);
Player p2 = new Player("Marquis Grissom", 9, 0.279f);
Player p3 = new Player("Ray Durham", 5, 0.282f);
Player p4 = new Player("Adrian Beltre", 29, 0.334f);
Player p5 = new Player("Cesar Izturis", 3, 0.288f);
Player p6 = new Player("Shawn Green", 15, 0.266f);

// Create Pitchers

Player p7 = new Pitcher("Kirk Rueter",46, 0.131f, 9);
Player p8 = new Pitcher("Kazuhisa Ishii",17, 0.127f, 13);

// Create Teams

Team t1 = new Team("Giants", "San Francisco", 91, 71);
Team t2 = new Team("Dodgers", "Los Angeles", 93, 69);

// Add Players to Teams

t1.addPlayer(p1);
p1.setTeam(t1);
t1.addPlayer(p2);
p2.setTeam(t1);
t1.addPlayer(p3);
p3.setTeam(t1);
t2.addPlayer(p4);
p4.setTeam(t2);
t2.addPlayer(p5);
p5.setTeam(t2);
t2.addPlayer(p6);
p6.setTeam(t2);

// Add Pitchers to Teams

t1.addPlayer(p7);
p7.setTeam(t1);
t2.addPlayer(p8);
p8.setTeam(t2);

Un objeto Team se puede almacenar con una sóla línea de código:

db.set(t1);

db.set(t2);
db.commit();

Donde db es una referencia a un objeto ObjectContainer, que se haya creado abriendo un fichero de base de datos, de esta forma:

ObjectContainer db = Db4o.openFile(filename);

Una base de datos db4o es un único fichero con una extensión .yap, y se utiliza su método set para almacenar objetos.

Observe que está linea almacena el objeto Team y su colección de objetos Player. Se puede probar esto recuperando uno de esos objetos Player. La forma más simple de hacer esto es utilizando QBE.

Player examplePlayer = new Player("Barry Bonds",0,0f);

ObjectSet result=db.get(examplePlayer);
System.out.println(result.size());

while(result.hasNext()) {
System.out.println(result.next());
}