Está en la página 1de 9

ARQUITECTURA DE SQLITE

Visión de conjunto
SQLite funciona compilando texto SQL en bytecode , luego ejecuta ese bytecode usando una
máquina virtual.

El sqlite3_prepare_v2() y las interfaces relacionadas actúan como un compilador para convertir


texto SQL en bytecode. El objeto sqlite3_stmt es un contenedor para un único programa de código
de bytes que utiliza para implementar una única instrucción SQL. La interfaz sqlite3_step() pasa un
programa de código de bytes a la máquina virtual y ejecuta el programa hasta que se complete o
forme una fila de resultados para devolver, o genere un error fatal o se interrupted .

Interfaz
Gran parte de la interfaz C-language se encuentra en los archivos
fuente main.c , legacy.c y vdbeapi.c, aunque algunas rutinas están dispersas en otros archivos
donde pueden tener acceso a estructuras de datos con alcance de archivo. La
rutina sqlite3_get_table() se implementa en table.c . La rutina sqlite3_mprintf() se encuentra
en printf.c . La interfaz sqlite3_complete() está en tokenize.c . La interfaz TCL es implementada
por tclsqlite.c .

Para evitar colisiones de nombres, todos los símbolos externos en la biblioteca SQLite comienzan
con el prefijo sqlite3 . Aquellos símbolos que están destinados para uso externo (en otras palabras,
aquellos símbolos que forman la API para SQLite) agregan un guión bajo, y así comienzan
con sqlite3_ . Las API de extensión a veces agregan el nombre de la extensión antes del guión bajo;
por ejemplo: sqlite3rbu_ o sqlite3session_ .

Tokenizer
Cuando se va a evaluar una cadena que contiene sentencias de SQL, primero se envía al tokenizer.
El tokenizer divide el texto SQL en tokens y entrega esos tokens uno por uno al analizador. El
tokenizer está codificado a mano en el archivo tokenize.c .

Tenga en cuenta que en este diseño, el tokenizer llama al analizador. Las personas que están
familiarizadas con YACC y BISON pueden estar acostumbradas a hacer las cosas al revés: hacer que
el analizador llame al tokenizador. Sin embargo, hacer que el tokenizer llame al analizador es mejor,
ya que se puede hacer que sea seguro para los hilos y se ejecute más rápido.

Analizador HERNANDEZ BOLAÑOS ALAN


El analizador asigna significado a tokens en función de su contexto. El ROBERTO
analizador sintáctico para SQLite se genera utilizando el generador de GRUPO 5801
analizador Lemon . Lemon hace el mismo trabajo que YACC / BISON, pero
usa una sintaxis de entrada diferente, que es menos propensa a errores. BASES DE DATOS PARA
Lemon también genera un analizador que es reentrante y seguro para DISPOSITIVOS MOVILES
subprocesos. Y Lemon define el concepto de un destructor no terminal
Tarea 4
para que no pierda memoria cuando se encuentran errores de sintaxis. El archivo de gramática que
maneja Lemon y que define el lenguaje de SQL que entiende SQLite se encuentra en parse.y .

Debido a que Lemon es un programa que normalmente no se encuentra en las máquinas de


desarrollo, el código fuente completo de Lemon (solo un archivo C) se incluye en la distribución de
SQLite en el subdirectorio "herramienta".

Generador de códigos
Después de que el analizador ensambla los tokens en un árbol de análisis sintáctico, el generador
de códigos se ejecuta para analizar el árbol de análisis sintáctico y generar el código de bytecode que
realiza el trabajo de la declaración de SQL. El objeto de sqlite3_stmt es un contenedor para este
bytecode. Hay muchos archivos en el generador de códigos, que
incluyen: attach.c , auth.c , build.c , delete.c , expr.c , insert.c , pragma.c , select.c , trigger.c , updat
e.c , vacuum.c , where.c , wherecode.c , y whereexpr.c . En estos archivos es donde ocurre la mayor
parte de la magia seria. expr.c maneja la generación de código para expresiones. donde * .c maneja
la generación de código para cláusulas WHERE en instrucciones SELECT, UPDATE y DELETE. Los
archivos attach.c , delete.c , insert.c , select.c , trigger.c update.c y vacuum.c manejan la
generación de código para sentencias SQL con los mismos nombres. (Cada uno de estos archivos
llama rutinas en expr.c y where.c según sea necesario). Todas las demás sentencias de SQL están
codificadas fuera de build.c . El archivo auth.c implementa la funcionalidad
de sqlite3_set_authorizer() .

El generador de códigos, y especialmente la lógica en donde * .c y en select.c , a veces se


llama planificador de consultas . Para cualquier instrucción de SQL particular, puede haber cientos,
miles o millones de algoritmos diferentes para calcular la respuesta. El planificador de consultas es
una IA que se esfuerza por seleccionar el mejor algoritmo entre estos millones de opciones.

Motor de Bytecode
El programa de bytecode creado por el generador de código lo ejecuta una máquina virtual.

La máquina virtual en sí está completamente contenida en un solo archivo de origen vdbe.c. El


archivo de encabezado vdbe.h define una interfaz entre la máquina virtual y el resto de la biblioteca
SQLite y vdbeInt.h que define las estructuras e interfaces que son privadas de la máquina virtual.
Varios otros archivos vdbe * .c son ayudantes de la máquina virtual. El archivo vdbeaux.c contiene
utilidades utilizadas por la máquina virtual y los módulos de interfaz utilizados por el resto de la
biblioteca para construir programas VM. El archivo vdbeapi.c contiene interfaces externas a la
máquina virtual como sqlite3_bind_int() y sqlite3_step() . Los valores individuales (cadenas,
números enteros, números en coma flotante y BLOB) se almacenan en un objeto interno
denominado "Mem" que es implementado por vdbemem.c .

SQLite implementa funciones de SQL utilizando devoluciones de llamada a rutinas de lenguaje C.


Incluso las funciones SQL integradas se implementan de esta manera. La mayoría de las funciones
SQL integradas (por ejemplo, abs() , count() , substr() , etc.) se pueden encontrar en el archivo
fuente func.c. Las funciones de conversión de fecha y hora se encuentran en date.c. Algunas
funciones como coalesce() y typeof() se implementan como bytecode directamente por el
generador de código.

B-Tree
Se mantiene una base de datos SQLite en el disco utilizando una implementación B-tree encontrada
en el archivo fuente btree.c . Se usa un árbol B por separado para cada tabla e índice en la base de
datos. Todos los B-trees se almacenan en el mismo archivo de disco. Los detalles del formato de
archivo son estables y están bien definidos, y se garantiza que serán compatibles en el futuro.

La interfaz del subsistema B-tree y el resto de la biblioteca SQLite está definida por el archivo de
cabecera btree.h .

Caché de página
El módulo B-tree solicita información del disco en páginas de tamaño fijo.
El page_size predeterminado es 4096 bytes, pero puede ser cualquier potencia de dos entre 512 y
65536 bytes. La memoria caché de la página es responsable de leer, escribir y almacenar en caché
estas páginas. La memoria caché de página también proporciona la retrotracción y la abstracción de
confirmación atómica y se ocupa del bloqueo del archivo de la base de datos. El controlador B-tree
solicita páginas particulares de la memoria caché de la página y notifica a la memoria caché de la
página cuando quiere modificar páginas o confirmar o deshacer cambios. La memoria caché de la
página maneja todos los detalles desordenados para asegurarse de que las solicitudes se manejen
de manera rápida, segura y eficiente.

La implementación de la memoria caché de la página principal se encuentra en el


archivo pager.c . La lógica del modo WAL está en wal.c por separado. El almacenamiento en
memoria caché en memoria se implementa mediante los archivos pcache.c y pcache1.c . La interfaz
entre el subsistema de caché de página y el resto de SQLite está definida por el archivo de
cabecera pager.h .

Interfaz del sistema operativo


Para proporcionar portabilidad entre sistemas operativos, SQLite usa un objeto abstracto
llamado VFS . Cada VFS proporciona métodos para abrir, leer, escribir y cerrar archivos en el disco,
y para otras tareas específicas del sistema operativo como encontrar la hora actual u obtener
aleatoriedad para inicializar el generador de números pseudoaleatorio incorporado. SQLite
actualmente proporciona VFSes para Unix (en el archivo os_unix.c ) y Windows (en el
archivo os_win.c ).

Utilidades
La asignación de memoria, las rutinas de comparación de cadenas sin caja, las rutinas de conversión
de texto a número y otras utilidades se encuentran en util.c. Las tablas de símbolos utilizadas por el
analizador se mantienen mediante tablas hash encontradas en hash.c. El archivo de
origen utf.c contiene subrutinas de conversión Unicode. SQLite tiene su propia implementación
privada de sqlite3_mprintf() (con algunas extensiones) en printf.c y su propio generador de
números pseudoaleatorios (PRNG) en random.c .

Código de prueba
Los archivos en la carpeta "src /" del árbol de fuentes cuyos nombres comienzan con la prueba son
solo para pruebas y no están incluidos en una compilación estándar de la biblioteca.

COMPONENTES DE SQLITE
Software SQLite tiene un enfoque inusual para administración de bases de datos, en comparación
con ofertas tales como DB2 de IBM y SQL Server de Microsoft. SQLite no tiene un programa de
servidor de base de datos separada; en cambio, se convierte en parte de la aplicación que utiliza la
base de datos. Diseño altamente eficiente de software implementa la mayor parte del estándar SQL-
92, evitando el uso intensivo de recursos encontrados generalmente con software de gestión de
base de datos informáticos.

SQLite
SQLite es un sistema de gestión de base de datos libre, código abierto, relacional que utiliza el
estándar lenguaje de consulta estructurado o SQL. Aunque la mayoría sistemas de servidor de bases
de datos involucran gigabytes de software, SQLite adapta a su base de código todo en un paquete
de 350KB lo que es una opción popular para aplicaciones de teléfonos inteligentes, tabletas y otros
sistemas pequeños. Un consorcio de compañías de hardware y software, como Oracle, Adobe y
Nokia, supervisa el desarrollo de SQLite.

Biblioteca
El componente principal en SQLite es su biblioteca, un archivo que se convierte en parte de una
aplicación de software más grande. Por ejemplo, si un programador escribe un juego que utiliza una
base de datos SQLite, su biblioteca se agrega a los archivos de programa para el juego en un proceso
llamado "compilar". El archivo de programa compilado contiene el juego y la librería de SQLite.
Cuando un jugador realiza un alto puntaje, el programa de juego pasa la información a la biblioteca,
que escribe el resultado en la base de datos.

Base de datos
SQLite almacena su información de la base de datos en un solo archivo, uno por base de datos. El
archivo contiene las tablas, vistas y otras estructuras normalmente presentes en una base de datos,
así como información de apoyo. Por ejemplo, el archivo contiene índices para localizar datos en una
base de datos rápidamente. El tamaño máximo de un archivo de base de datos SQLite es 140
terabytes, suficientes para casi cualquier uso imaginable.

Archivos auxiliares
SQLite mantiene archivos auxiliares que estado de la base de datos. Estos archivos residen en el
mismo directorio que el archivo de base de datos. Un archivo, llamado diario de rollback, guarda las
transacciones en curso. Si el equipo experimenta un apagón en medio de una actualización de la
base de datos y posteriormente se reinicia, SQLite utiliza el diario de rollback deshacer con gracia
las transacciones medias. Otro fichero, llamado el registro de escritura anticipada o WAL, sirve un
propósito similar. Una base de datos puede tener una revista de rollback o un WAL, pero no ambos.
ARQUITECTURA DE CASSADRA
Arquitectura y características de Cassandra Cassandra nos proporciona tolerancia a fallos y
disponibilidad, pero a cambio de ser eventualmente consistente, tal y como se define en el teorema
CAP (ya que la actividad de inserción de datos no es su fuerte, si no su consulta de información de
forma rápida), que ha sido explicado anteriormente. El nivel de consistencia puede ser configurado,
según nos interese incluso a nivel de query, dicha configuración está repartida de la siguiente forma:
● Escala Distribuida: lo que quiere decir que la información está repartida a lo largo de los nodos del
cluster. Además ofrece alta disponibilidad, de manera que si alguno de los nodos se cae el servicio
no se degradará.

● Escala linealmente: lo que quiere decir que el rendimiento de forma lineal respecto al número de
nodos que añadamos. Por ejemplo, si con 2 nodos soportamos 100.000 operaciones por segundo,
con 4 nodos soportaremos 200.000. Esto da mucha predictibilidad a nuestros sistemas.

● Escala de forma horizontal: lo que quiere decir que podemos escalar nuestros sistemas añadiendo
nuevos nodos basados en hardware commodity de bajo coste. Implementa una arquitectura Peer-
to-Peer, lo que quiere decir es que todos los nodos tienen la misma importancia, por lo cual el patrón
de maestro-esclavo es inexistente, así que ningún nodo tendrá alguna información de más con
respecto al resto. De esta forma cualquier nodo puede tomar el rol de coordinador de una query.
Será el driver el que decida qué nodo quiere que sea el coordenador (esta gestión la realiza
internamente cassandra). Los datos son repartidos a lo largo del cluster en base a un token único
calculado para cada fila por una función hash. Los nodos se reparten equitativamente el rango de
tokens que va de -2 63 a 2 63, esto define el nodo primario.

Internamente Cassandra replicará los datos entre los nodos con la política que le definamos, por
ejemplo, definiendo el factor de replicación.

Además soporta el concepto de data center para agrupar los nodos lógicamente y tener los datos
más cerca del usuario.
Componentes de Cassandra
Una vez que ya sabemos la arquitectura que tiene Cassandra y como funciona internamente,
además de las posibilidades que nos brinda vamos a conocer de forma resumida cómo está
compuesta para así ser consciente en todo momento qué componentes tiene esta base de datos.

● Cluster: es un componente que contiene uno o más centro de datos (datacenter).

● Centro de datos (datacenter): se trata de una colección que almacena los nodos relacionados.

● Nodo: es el lugar donde se almacena los datos de Cassandra. ○ Commit log: es un fichero en donde
se almacena la información sobre los cambios en los datos. Sirve para recuperar los datos en caso
de una fallo en el sistema. ○ MemTable: estructura de almacenamiento en memoria. Contiene los
datos que aún no han sido escritos en un SSTable. ○ SSTable: es un fichero que almacenan los datos
escritos en disco. Cada fichero SSTable es inmutable (que no cambia) una vez creado.

● About internode communications (gossip): es el protocolo de comunicación peer-to-peer para


descubrir y compartir información sobre la localización y estado del nodo en un clúster de
Cassandra.

● Partitioner: este componente determina cómo se distribuyen los datos entre los nodos (las copias
entre los nodos).

● Replica placement strategy: define la estrategia a seguir para almacenar las copias de los mismos
datos en diferentes nodos, de forma que se aseguren la accesibilidad y la tolerancia a fallos. Se
pueden definir diferentes estrategias. Hay que tener en cuenta que no existen copias principales ni
secundarias, todas las copias, incluida la primera, con réplicas.

● Snitch: define la topología que utilizan las estrategias de replicación para colocar las réplicas y
dirigir las consultas de forma eficiente.
COMPARACION ENTRE SISTEMA GESTOR DE BASE DE DATOS Y MANEJADOR DE TABLAS
SGBD SQLITE MANEJADOR DE TABLAS ACCESS
SQLite es un motor de base de datos SQL Microsoft Access (a menudo llamado Access) es
autónomo, de alta confiabilidad, integrado, con un sistema de administración de bases de datos
todas las funciones y de dominio público. de Microsoft que combina el motor de base de
SQLite es uno de los motores de bases de datos datos relacional de Microsoft Jet con una
más utilizados en el mundo. interfaz gráfica de usuario para la manipulación
de datos y consultas.
SQLite fue construido por Dwayne Richard Hipp El acceso es creado y comercializado por
y lanzado en 2000. Microsoft como miembro del conjunto de
aplicaciones de Microsoft Office, incluido en las
ediciones Professional y superior o se vende
por separado.
SQLite es de uso gratuito. El acceso es un producto comercial.
SQLite es sin servidor. Puede almacenarlo y Microsoft Access solo puede ejecutarse en
ejecutarlo en cualquier sistema operativo. Windows.
Funciona con casi todos los lenguajes de Access admite varios lenguajes de
programación: programación:
Actionscript C
Ada C#
BASIC C ++
C Delphi
C# Java (JDBC-ODBC)
C ++ VBA
D Visual Basic.NET
Delphi
Forth
Fortran
Haskell
Java
JavaScript
Lisp
Lua
Matlab
Objective-C
OCaml
Perl
PHP
PL / SQL
Python
R
Ruby
Scala
Scheme
Smalltalk
Tcl
SQLITE no acepta procedimientos almacenados Access admite procedimientos almacenados
Tiene una herramienta de interfaz visual
integrada. No necesita encontrar otra
herramienta para ello. Puede consultar y
manipular grandes cantidades de datos sin
conocer SQL.
Está bien integrado con otros productos de MS
Office, Excel, Visual Basic y SQL Server, por lo
que la migración dentro del mundo de
Microsoft está integrada.
Compatible con .NET: el acceso es una opción
de acceso para los usuarios que planean
desarrollar software utilizando .NET
Soporte multiusuario, Aunque en realidad no
es una buena característica, sí es compatible.
Ampliamente popular: Microsoft Access es el
sistema de base de datos de escritorio más
popular del mundo.
Falta de encriptación de datos incorporada. No es gratis. Paga jugar.
SQLite es un DBMS de usuario único. Si se No es multiplataforma.
requiere un sistema multiusuario, se requiere Personalización limitada Microsoft tiene
una alternativa. muchas plantillas de acceso preconstruidas que
No está diseñado para manejar bases de datos puede descargar. Pero no puede cambiar nada
realmente a gran escala. en la estructura subyacente, lo que dificulta el
Pensamiento final ajuste de su aplicación.
Tanto SQLite como Access son buenos para Microsoft Access no tiene paridad completa
conjuntos de datos a pequeña escala, pero si con una base de datos SQL tradicional, por lo
necesita algo rápido para el escritorio y usa que muchas funciones no están disponibles y
Windows, Access podría ser una buena opción. cualquier SQL existente generalmente debe
Si crea una aplicación móvil, dispositivos reescribirse para usar en Access.
integrados e Internet de cosas, o usa otro Tiene bajo rendimiento cuando se trata de
sistema operativo, elija SQLite. grandes bases de datos.

También podría gustarte