JavaScriptSQL (JSSQL)
Documentación

En esta sección la documentación de uso del motor JSSQL, del conversor JSBD_Conversor y del indexador JSBD_Indexador


Descripción de la estructura de la JSBD

Otros manuales disponibles:

Índice

  1. Diseño Inicial
  2. Archivos de definición de la base de datos
  3. Archivos de tablas
  4. Archivos de índices
  5. Archivos de contenido
  6. Archivos de índices de contenido

I. Diseño Inicial

A continuación se muestra el diagrama de diseño inicial que describe la relación entre los distintos módulos utilizados para el funcionamiento de la base de datos en JavaScript.

Diagrama de Diseño inicial

El funcionamiento básico de la base de datos para JavaScript consiste en generar mediante un conversor de bases de datos y un indexador de documentos los archivos de definiciones, tablas, índices y demás componentes de la base de datos JSBD. Luego el motor JSSQL permite acceder de manera eficiente a la base de datos JSBD mediante consultas SQL.

Cada uno de estos componentes o subsistemas están conformados por una o más clases a ser usadas por los desarrolladores. El conversor y el indexador están desarrollados en PHP mientras que el motor JSSQL esta desarrollado íntegramente en JavaScript.

Una vez generada una base de datos JSBD, se pueden realizar consultas SQL mediante el motor JSSQL sin necesidad de acceder a ningún orto motor de bases de datos y sin necesidad de utilizar ningún lenguaje de scripting que funcione del lado del servidor (PHP, ASP, etc.).

La base de datosJSBD es un conjunto de archivos interpretables por JavaScript que contienen la información de la estructura y los datos de la base de datos.

En todas las estructuras de almacenamiento utilizadas se opto por el uso de estructuras JSON (Java Script Object Notation) de manera que cada estructura representa un vector u objeto a ser evaluado por el motor JSSQL.

Los archivos pueden cargarse dinámicamente de manera de optimizar el uso de memoria y los tiempos de respuesta.

Índice

II. Archivo de definición de la base de datos

Define la estructura de las tablas de una determinada base de datos. Incluyendo los nombres de las tablas, los nombres de los campos que las componen y los tipos de los mismos. También se detalla información sobre el indexado y paginado de las tablas.

Ejemplo de la estructura de la base de datos neptuno:

neptuno.jsbd
[
{ "tname":"categorias",
  "part":0,
  "size":8,
  "fields":[
    {"fname":"idcategoria","ftype":"numeric","findex":false},
    {"fname":"nombrecategoria","ftype":"string","findex":false},
    {"fname":"descripcion","ftype":"string","findex":false}  ]

  },
{ "tname":"clientes",
  "part":0,
  "size":91,
  "fields":[
    {"fname":"idcliente","ftype":"string","findex":false},
    {"fname":"nombrecompania","ftype":"string","findex":false},
    {"fname":"nombrecontacto","ftype":"string","findex":false},
    {"fname":"cargocontacto","ftype":"string","findex":false},
    {"fname":"direccion","ftype":"string","findex":false},
    {"fname":"ciudad","ftype":"string","findex":false},
    {"fname":"region","ftype":"string","findex":false},
    {"fname":"codpostal","ftype":"string","findex":false},
    {"fname":"pais","ftype":"string","findex":true},
    {"fname":"telefono","ftype":"string","findex":false},
    {"fname":"fax","ftype":"string","findex":false}  ]

  },
 (.)
]

La definición de la base de datos se almacena como un vector de objetos del tipo tabla.

Cada objeto del tipo tabla posee los siguientes atributos:

  • tname: El nombre de la tabla
  • part: La cantidad de registros que componen una página de la tabla (en caso de ser cero la tabla no se particiona).
  • size: La cantidad de registros totales de la tabla.
  • fields: Un vector de objetos de definición de campos (field).

Cada objeto de tipo campo (field) posee los siguientes atributos:

  • fname: Nombre del campo
  • ftype: Tipo de campo
    Los tipos soportados son los siguientes
    • numeric: números enteros, o con decimales.
    • string: cadenas de caracteres.
    • boolean: variables lógicas (true/false).
    • date: tiempo expresado en cantidad de milisegundos desde el 01/01/1970.
    • link:hace referencia a un documento cuyo contenido ha sido indexado.
  • findex: Valor booleano que indica si la tabla posee un índice en dicho campo.

Este vector es cargado en memoria al abrirse la base de datos para ser consultados por el motor JSSQL.

Índice

III. Archivos de tablas

Se dispone de un archivo por cada una de las tablas de la base de datos. Representan un vector de dos dimensiones conteniendo los valores de todos los registros de la tabla.

En caso de estar particionada la tabla se cuenta con múltiples archivos asociados, cada uno con una cantidad predefinida de registros.

Ejemplo de la estructura de la tabla categorías:

categorias.jsbd
[
[1,"Bebidas","Gaseosas, café, té, cervezas y maltas"],
[2,"Condimentos","Salsas dulces y picantes, delicias, comida para untar y aderezos"],
[3,"Repostería","Postres, dulces y pan dulce"],
[4,"Lácteos","Quesos"],
[5,"Granos/Cereales","Pan, galletas, pasta y cereales"],
[6,"Carnes","Carnes preparadas"],
[7,"Frutas/Verduras","Frutas secas y queso de soja"],
[8,"Pescado/Marisco","Pescados, mariscos y algas"]
];
                     

Índice

IV. Archivos de índices

En caso de que un campo de una tabla se encuentre indexado se genera un vector 'asociativo' que asocia a cada valor existente del campo con un listado de números de registro con dicho valor.

El archivo se nombra como: 'nombre de tabla'_'numero de campo'.ind

Ejemplo de la estructura del índice del campo 8 (pais) de la tabla clientes:

clientes_8.ind
{
"Alemania":[0,5,16,24,38,43,51,55,62,78,85],
"Argentina":[11,53,63],
"Austria":[19,58],
"Bélgica":[49,75],
"Brasil":[14,20,30,33,60,61,66,80,87],
"Canadá":[9,41,50],
"Dinamarca":[72,82],
"España":[7,21,28,29,68],
"Estados Unidos":[31,35,42,44,47,54,64,70,74,76,77,81,88],
"Finlandia":[86,89],
"Francia":[6,8,17,22,25,39,40,56,73,83,84],
"Irlanda":[36],
"Italia":[26,48,65],
"México":[1,2,12,57,79],
"Noruega":[69],
"Polonia":[90],
"Portugal":[27,59],
"Reino Unido":[3,10,15,18,37,52,71],
"Suecia":[4,23],
"Suiza":[13,67],
"Venezuela":[32,34,45,46]
};      

Estos índices se cargan en memoria en el momento de apertura de la base de datos.

Índice

V. Archivos de contenido

En caso de que un campo sea del tipo 'link' se utiliza el JSBD_Indexador para indexar los contenidos de los documentos referenciados.

Por cada uno de los campos del tipo 'link' se utiliza una carpeta con el nombre de la tabla y el nombre del campo (ej: empleados_notas) donde se almacenan las estructuras relacionadas con el contenido de los enlaces.

Los archivos de contenido representan el contenido textual del archivo indexado, para que pueda ser consultado por el motor JSSQL.

Cada archivo es nombrado con el número de registro asociado.

Ejemplo de contenido de un archivo indexado de la tabla empleados, campo notas

empleados_notas/2.js
"Janet es licenciada en Química por la Universidad de Boston (1984).
 También ha completado un programa de formación en
Gestión de minoristas de alimentación. Janet fue
 contratada como vendedora asociada en 1991 y fue ascendida a representante
 de ventas en Febrero de 1992";

Índice

VI. Archivos de índices de contenido

En caso de que una serie de documentos hayan sido indexados por el indexador JSBD_Indexador se genera un índice invertido que indica los documentos en donde se encontraron cada una de las palabras.

Este índice se particiona por letra de modo que cada archivo contienen la información de las palabras que comienzan con una determinada letra.

Ejemplo de contenido un archivo correspondiente al índice invertido para la letra A del campo notas de la tabla empleados:

Cada archivo es nombrado con el número de registro asociado.

empleados_notas\A.js
{
"ADMINISTRACION":[1,5]
,"ALEMAN":[1,7]
,"ALIMENTACION":[2]
,"AMERICANO":[3]
,"ANDREW":[1]
,"ANDREWS":[4]
,"ANGELES":[5]
,"ANNE":[7]
,"ANTES":[8]
,"ARTE":[0]
,"ARTES":[3]
,"ASCENDIDA":[2]
,"ASCENDIDO":[1,4]
,"ASIGNADA":[3]
,"ASISTIDO":[5]
,"ASOCIACION":[1]
,"ASOCIADA":[2]
};

También se crea un archivo con el listado de las palabras frecuentes, estas palabras serán omitidas en las búsquedas:

empleados_notas\Stop.js
["UNIVERSIDAD"];

Índice