Bases de datos en dispositivos móviles - Introducción


Una base de datos es un conjunto ordenado de información perteneciente a un mismo dominio o entidad y almacenada en formato digital. Las bases de datos constituyen el soporte principal de información de empresas, instituciones o gobiernos en todos los campos del saber de la sociedad moderna: científico, de negocios, de ocio, militar, médico, educativo, etc.

Los sistemas de gestión de bases de datos son programas capaces de acceder a los datos de forma rápida y estructurada, permitiendo además diferentes tipos de operaciones, entre las que se encuentran las cuatro básicas: consulta de los datos, insertar nuevos datos, modificar datos existentes o borrar datos. Usualmente al programa que realiza estas operaciones se le denomina motor de base de datos, para diferenciarlo del archivo físico que contiene la información.

La gran mayoría de las bases de datos modernas se les suele llamar  a bases de datos relacionales por cumplir con el modelo relacional.

El modelo relacional, es un modelo matemático establecido en 1970 por Edgar Frank Codd, un matemático que trabajaba en los laboratorios de IBM en San José, California.

Este modelo define los contenedores de información como tablas formadas por filas y columnas y que a su vez pueden formar una jerarquía de relaciones entre sí. Las operaciones de consulta devuelven a su vez los datos en forma de tablas o modifican determinadas tablas de datos.

Los datos almacenados en una base de datos pueden clasificarse en estáticos o dinámicos según su variabilidad.

Bases de datos estáticas

Son bases de datos de sólo lectura, cuya información de datos históricos solo sirve para estudiar la evolución de alguna entidad durante el tiempo o tomar determinadas decisiones por parte del usuario que consume la información.

Bases de datos dinámicas

Estas son bases de datos donde la información almacenada se modifica con el tiempo, permitiendo operaciones como actualización, borrado y adición de datos, además de las operaciones fundamentales de consulta. Un ejemplo de esto puede ser la base de datos utilizada en un sistema de información de un supermercado, una farmacia, un videoclub o una empresa o una red social.
Las bases de datos en dependencia de su ubicación se clasifican en locales y remotas.

Base de datos local

Reside por lo general en el mismo dispositivo o terminal desde donde se consulta la información. Su acceso es muy rápido y por lo general contiene información que no es compartida con otros usuarios.

Normalmente se componen de un programa o motor para realizar las consultas y de un archivo con la información.

Es el caso típico de las bases de datos de escritorio, como Microsoft Access o las bases de datos de dispositivos móviles como SQLite.

Bases de datos remotas (de servidor o cliente/servidor)

Residen en una ubicación remota, fuera del terminal o dispositivo desde donde se consulta o presenta información. La velocidad de acceso es más lenta, con fuerte dependencia de la conectividad y ancho de banda de la red a través de la cuál se realizan las consultas pero con la ventaja de poseer un motor muy potente y grandes volúmenes de información que pueden compartirse entre miles de usuarios.

En este caso tenemos casi todas las bases de datos de servidor del mercado: Microsoft SQL Server, Oracle Database, IBM DB2, MySQL, etc.

En el caso de bases de datos remotas, los dispositivos móviles que acceden a través de la red, necesitan una interfaz que permita tanto enviar como recibir datos. Esta interfaz suelen ser los llamados servicios Web.

Servicios Web

Un servicio Web (en inglés, Web Service) es una tecnología que utiliza un conjunto de protocolos y estándares abiertos que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes de programación diferentes, y ejecutadas sobre cualquier plataforma, pueden utilizar los servicios Web para intercambiar datos en redes de ordenadores como Internet.

Los servicios Web suelen exponer determinados métodos que nos permiten de manera segura y en un entorno distribuido, acceder a la información contenida en las bases de datos remotas.

Manipulación de la información

El lenguaje más común para realizar consultas sobre bases de datos  es el SQL (Structured Query Language), un estándar implementado por los principales motores o sistemas de gestión de bases de datos relacionales.

Este lenguaje soporta entre otras, con sus sentencias en inglés, las cuatro operaciones básicas de manipulación de datos:

  • SELECT (para recuperar información)
  • UPDATE (para actualizar información)
  • INSERT (para añadir nueva información)
  • DELETE (para borrar información existente)


Diseño de las bases de datos

El primer paso para crear una base de datos, es planificar el tipo de información que se quiere almacenar en la misma, teniendo en cuenta dos aspectos: la información disponible y la información que necesitamos.
La planificación de la estructura de la base de datos, en particular de las tablas, es vital para la gestión efectiva de la misma. El diseño de la estructura de una tabla consiste en una descripción de cada uno de los campos (columnas) que componen el registro (filas) y los valores o datos que contendrá cada uno de esos campos.
Los campos son los distintos tipos de datos que componen la tabla, por ejemplo: nombre, apellido, domicilio. La definición de un campo requiere: el nombre del campo, el tipo de campo, el ancho del campo, etc.
Los registros constituyen la información que va contenida en los campos de la tabla, por ejemplo: el nombre del paciente, el apellido del paciente y la dirección de este.
Generalmente los diferentes tipos de campos que se pueden almacenar son los siguientes: Texto (caracteres), Numérico (números), Fecha / Hora, Lógico (informaciones lógicas si/no, verdadero/falso, etc.), imágenes.
En resumen, el principal aspecto a tener en cuenta durante el diseño de una tabla es determinar claramente los campos necesarios, definirlos en forma adecuada con un nombre especificando su tipo y su longitud.
Otro aspecto importante es evitar la duplicidad o redundancia de información. Esto se consigue marcando determinadas columnas como clave. Esto significa que en cada una de las filas, el valor de ese campo o columna deberá ser único.
Por ejemplo, si tenemos un registro de viajeros con los campos nombre, número de pasaporte, teléfono y nacionalidad, si marcamos el campo número de pasaporte como clave, no podrán guardarse datos de dos viajeros cuyo número de pasaporte coincida.
Si utilizamos el campo nombre como clave, puede que existan dos viajeros, uno de México y otro de España que coincidan en el nombre, por ejemplo, Juan Pérez García, sin embargo difícilmente coincidirán en el número de pasaporte, ya que cada país lo establece y lo emite incluso con formatos y normas distintas.

Bases de datos locales disponibles para dispositivos móviles
  • SQLite
  • Microsoft Local Database

SQLite

Es la base de datos seleccionada por Research in Motion, Apple y Google para servir de base de datos local en sus aplicaciones desplegadas en los sistemas operativos para dispositivos móviles Blackberry OS, Blackberry PlayBook OS, iOS y Android. Actualmente es la base de datos más utilizada del mercado.
Debe su popularidad a que es de código abierto, consume muy pocos recursos y no necesita servicios instalados para su funcionamiento.
A diferencia de los sistemas de gestión de bases de datos de servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas y funciones. Esto reduce la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos (definiciones, tablas, índices, y los propios datos), son guardados como un sólo fichero estándar en el terminal, que cualquiera con acceso al sistema de archivos puede leer.
Solo utiliza cinco tipos de datos: TEXT, NUMERIC, INTEGER, REAL y NONE. Aunque los campos de tipo BLOB son soportados (Binary Large Objects), se recomienda almacenar esta información en el sistema de archivo y la ruta a la misma guardarla como un texto en la base de datos.
SQLite soporta accesos de lectura concurrentes, pero bloquea las operaciones de escritura que se realizan de manera secuencial. Esto es muy importante cuando se diseñan aplicaciones multiproceso.
La integridad referencial o el mecanismo que vigila que los valores de los campos sean coherentes entre tablas relacionadas, no está activado por defecto.
Las consultas SQL, aunque siguen prácticamente todo el estándar ANSI SQL-92, no soportan RIGHT ni FULL OUTER JOINs que permiten unir varias tablas en el resultado de una consulta compleja.
Por último, las columnas una vez definidas, no pueden ser modificadas o borradas con la sentencia ALTER TABLE.
A pesar de sus limitaciones, SQLite constituye un poderoso gestor de base de datos especialmente en los dispositivos móviles donde tenemos más limitaciones de memoria, espacio en disco y potencia de proceso (CPU).

Microsoft Local Database for Window Phone

Similar a SQLite, Microsoft Corporation ha realizado su propia implementación de un motor de base de datos relacional para los dispositivos móviles que ejecuten el sistema operativo Windows Phone.

Utiliza un mecanismo denominado LINQ to SQL, para todas las operaciones con la base de datos que es almacenada en el almacenamiento aislado de la aplicación (isolated storage). Entre las operaciones se incluyen tanto las de consulta y modificación de datos así como las de definición o creación del propio esquema de la base de datos.

LINQ o Language Integrated Query (Lenguaje Integrado de Consulta), es un sublenguaje de manipulación de datos que está incluido en toda la familia de lenguajes de programación de la plataforma Microsoft .NET, tales como Visual Basic o C#.

Aunque LINQ soporta inicialmente consultas en colecciones en memoria, bases de datos relacionales y datos XML, es una arquitectura extensible que permite a desarrolladores de orígenes de datos adicionales el uso del LINQ, implementando los operadores de consulta estándar como métodos extensores para sus orígenes de datos, o mediante la implementación de la interfaz IQueryable que permite convertir un árbol de expresión en tiempo de ejecución para transformarlo en algún lenguaje de consultas.
Los operadores de consulta estándar son usados para objetos también y permiten consultar objetos en la memoria con la misma sintaxis LINQ.
Cuando la aplicación en Windows Phone se ejecuta y se produce un acceso a los datos relacionales, LINQ to SQL traduce las consultas de lenguaje integrado a sentencias del dialecto Trasact-SQL que utiliza Microsoft en sus bases de datos y las envía al motor de base de datos local para que sean ejecutadas.
Cuando el motor devuelve los resultados, LINQ to SQL los traduce en objetos que puedan ser manipulados desde el propio lenguaje de programación que estemos utilizando en Windows Phone.

De manera muy parecida a SQLite:

  • La base de datos local se ejecuta en el mismo proceso Windows Phone que nuestra aplicación (nunca como un servicio continuo en background)
  • Una base de datos local solo puede ser accedida por su correspondiente aplicación Windows Phone. Como la base de datos reside en el almacenamiento aislado de la aplicación, ninguna otra aplicación puede acceder a los datos
  • La base de datos solo puede ser accedida con LINQ to SQL. Ningún otro mecanismo SQL de acceso está soportado

Bibliografía

  • Language Integrated Query. http://es.wikipedia.org/wiki/Language_Integrated_Query
  • Bases de datos. http://es.wikipedia.org/wiki/Base_de_datos
  • Sistemas de gestión de bases de datos. http://es.wikipedia.org/wiki/Sistema_de_gesti%C3%B3n_de_base_de_datos
  • Local database overview for Windows Phone. http://msdn.microsoft.com/en-us/library/hh202860(v=vs.92).aspx
  • SQLite. http://www.sqlite.org/

posted under , , |

6 comentarios:

Unknown dijo...

excelente documento, justo lo que estaba buscando... gracias

XSpy dijo...

Muy buena documentación, me quitaste unas dudas.
Gracias.

Anónimo dijo...

He programado un servicio web que almacena e intercambia información con una base de datos SQLite (comandaTom.sqlite), me funciona perfectamente en mi red local (formada por un ordenador, en donde esta el fichero de SQLite y un par de dispositivos moviles Android), la conexión la realizo de la siguiente forma:
nombreServidor = "org.sqlite.JDBC";
nombreBBDD = "jdbc:sqlite:C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\webapps\\bdLITE\\comandaTom.sqlite";
Quiero situar este servico web y la base de datos SQLite en un servidor remoto pero no se como realizar la conexión con la base de datos SQLite. No se como indicar la ruta del fichero "comandaTom.sqlite" ni tampoco si es preciso hacer alguna instalación de algún programa en el servidor remoto.
Te agradeceria una ayuda. Un saludo.

Jose Manuel Ayala Wilson dijo...

Tomado de Wikipedia:

"A diferencia de los sistema de gestión de bases de datos cliente-servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas y funciones. Esto reduce la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos (definiciones, tablas, índices, y los propios datos), son guardados como un sólo fichero estándar en la máquina host. Este diseño simple se logra bloqueando todo el fichero de base de datos al principio de cada transacción."

El escenario que estas planteando es el de una base de datos cliente servidor tradicional. Un servicio web es una pieza de arquitectura que permite acceder o manipular datos a traves de una interfaz basada en estandares web para establecer la comunicacion. 

El servicio web puede implicar que multiples usuarios se conecten a tu base de datos, hagan actualizaciones, lecturas, borrados en algunos casos de forma inividual y en otros de forma concurrente. Tu base de datos tiene que tener escalabilidad, o sea debe poder servir datos a los usuarios de forma creciente y en muchos casos de forma concurrente ( varios usuarios a la vez).

Es aqui donde SQLite no aplica. No esta diseñada para ser una base de datos de servidor con la potencia y escalabilidad necesarias que tu aplicacion puede demandar. Ademas al incorporar tu servidor de base de datos al mismo proceso del servicio web, un simple bloqueo de datos podria comprometer la integridad del servicio e incluso podria hacer caer al propio servidor.

Yo te recomiendo utilizar MySql que esta presente en el 90% de todos los hostings de internet, gratuitos o de pago. Si eres mas atrevido puedes usar un PAAS como Heroku o Google Application Engine que si estan preparados para servir concurrentemente a miles de usuarios un gran volumen de datos. Ambos tienen tramos gratuitos de uso que te permiten probar perfectamente e incluso operar tu aplicacion si no sobrepasa los limites fijados por el hosting.

Espero haberte podido ayudar.

Sergio dijo...
Este comentario ha sido eliminado por el autor.
Anónimo dijo...

t12758

Publicar un comentario

Entrada más reciente Entrada antigua Inicio