VoltDB Up & Running
Índice Introducción Qué es? Conceptos clave Instalación Ejemplo Hola Mundo Procedimientos Almacenados
VoltDB :: Introducción Qué es? Base de datos en memoria y distribuida. No hay Base de datos como tal, hay catálogos que contienen tablas en memoria. Estos catálogos se replican a través de los nodos, donde el nodo maestro mantiene el tracking de los datos.
VoltDB :: Introducción Conceptos clave Mantenimiento de Nodos VoltDB ha pensado en el caso de que se den caídas de los nodos. En caso de caída, otro nodo mantiene la consistencia de datos. Snapshots: en caso de querer guardar el sistema, se pueden crear Snapshots que pueden ser restaurados con posterioridad, para evitar tener que hacer un nuevo catálogo.
VoltDB :: Introducción Conceptos clave Tipos de Distribución de Nodos Replicación: nos permite replicar las tablas a través de los nodos, para acceder más rápidamente a los datos. Partición: dado una clave primaria de una tabla, esta es divida a través de los nodos teniendo en cuenta esa clave. La clave debe ser un solo campo de la tabla.
VoltDB :: Instalación Requisitos Previos Ubuntu 64 Bits RAM: 1GB
VoltDB :: Instalación Instalación en Single-Node Paso 1. Descargar la versión debian: $wget http://voltdb.com/downloads/technologies/server/voltdb_3.4-1_amd64.deb Paso 2. Instalar VoltBD: $ sudo dpkg i voltdb_3.4-1_amd64.db
VoltDB :: Ejemplo Hola Mundo Preparación previa Crear directorio y cambiarnos a el: $ mkdir helloworld $ cd helloworld
VoltDB :: Ejemplo Hola Mundo El esquema del catálogo Crear esquema BBDD helloworld.sql : CREATE TABLE HELLOWORLD( HELLO VARCHAR(15), WORLD VARCHAR(15), DIALECT VARCHAR(15) NOT NULL, PRIMARY KEY (DIALECT) ); PARTITION TABLE HELLOWORLD ON COLUMN DIALECT;
VoltDB :: Ejemplo Hola Mundo Compilar esquema y operar: Compilar esquema: $ voltdb compile o helloworld.jar helloworld.sql Creación del catálogo: $ voltdb créate catalgo helloworld.jar Operaciones con el catálogo: $ INSERT INTO helloworld VALUES ( hello, world, English ); $ SELECT * FROM helloworld WHERE dialect= English ;
VoltDB utiliza JAVA para comunicarse Los procedimientos almacenados están escritos en Java y nos sirven para comunicarnos con VoltDB, ya sea para leer o insertar datos en las tablas. Añadir las siguientes líneas al helloworld.sql : CREATE PROCEDURE FROM CLASS insert; CREATE PROCEDURE FROM CLASS select; PARTITION PROCEDURE insert ON TABLE HELLOWORLD COLUMN DIALECT; PARTITION PROCEDURE select ON TABLE HELLOWORLD COLUMN DIALECT;
Procedimientos almacenados que usaremos Vamos a ver dos ejemplos sencillos de inserción y selección a través de los procedimientos almacenados. Simplemente crearemos los archivo.java siguientes: insert.java select.java client.java
Insert.java import org.voltdb.*; public class insert extends VoltProcedure{ public final SQLStmt sql = new SQLStmt( "INSERT INTO HELLOWORLD VALUES (?,?,?);" ); public VoltTable[] run( String languaje, String hello, String world) throws VoltAbortException{ voltqueuesql(sql, hello, world, languaje); voltexecutesql(); return null; } }
Select.java import org.voltdb.*; public class select extends VoltProcedure{ public final SQLStmt sql = new SQLStmt( "SELECT HELLO, WORLD FROM HELLOWORLD " + " WHERE DIALECT =?;" ); public VoltTable[] run( String languaje) throws VoltAbortException{ voltqueuesql(sql, languaje); return voltexecutesql(); } }
Client.java import org.voltdb.*; import org.voltdb.client.*; public class Client { /** * @param args * @throws Exception * @throws */ public static void main(string[] args) throws Exception { // TODO Auto-generated method stub org.voltdb.client.client myapp; myapp = ClientFactory.createClient(); myapp.createconnection("localhost");
Client.java - continuación myapp.callprocedure("insert", "English","Hello","World"); myapp.callprocedure("insert", "French","Bonjour","Monde"); myapp.callprocedure("insert", "Spanish","Hola","Mundo"); myapp.callprocedure("insert", "Danish","Hej","Verden"); myapp.callprocedure("insert", "Italian","Ciao","Mondo"); final ClientResponse response = myapp.callprocedure("select", "Spanish"); if(response.getstatus()!=clientresponse.success){ System.err.println(response.getStatusString()); System.exit(-1); }
Client.java - continuación final VoltTable results[]=response.getresults(); if(results.length==0 results[0].getrowcount()!=1){ System.out.printf("I can't say Hello in that languaje.\n"); System.exit(-1); } VoltTable resulttable=results[0]; VoltTableRow row = resulttable.fetchrow(0); System.out.printf("%s, %s!\n", row.getstring("hello"), row.getstring("wolrd")); } }
Variable de Entorno y generación de.class Ahora establecemos la variable de entorno: echo CLASSPATH=./:/home/javier/Escritorio/voltdb- 3.4/lib/*:/home/javier/Escritorio/voltdb-3.4/voltdb/* Creamos los.class: javac client.java javac insert.java javac select.java
Compilar el archiv.sql en un jar voltdb compile --classpath="./" -o helloworld.jar helloworld.sql
Archivo deployment.xml Creamos el archivo deployment.xml: <?xml version="1.0"?> <deployment> <cluster hostcount="1" sitesperhost="2" /> <httpd enabled="true"> <jsonapi enabled="true" /> </httpd> </deployment>
La creación del catálogo create catalog helloworld.jar deployment deployment.xml host localhost
Ejecución En un nuevo terminal, vamos al directorio donde hemos estado operando y ejecutamos: $ java Client
Salida Devolverá algo parecido a lo siguiente: javier@javier-parallels-virtual-platform:~/helloworld$ Client java log4j:warn No appenders could be found for logger (HOST). log4j:warn Please initialize the log4j system properly. log4j:warn See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Hola, Mundo!
Preguntas