ES2930440T3 - Indice de tabla de base de datos - Google Patents

Indice de tabla de base de datos Download PDF

Info

Publication number
ES2930440T3
ES2930440T3 ES17000126T ES17000126T ES2930440T3 ES 2930440 T3 ES2930440 T3 ES 2930440T3 ES 17000126 T ES17000126 T ES 17000126T ES 17000126 T ES17000126 T ES 17000126T ES 2930440 T3 ES2930440 T3 ES 2930440T3
Authority
ES
Spain
Prior art keywords
column
rows
bitmap
database table
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES17000126T
Other languages
English (en)
Inventor
Enrico Mano
Aragon Jose Morales
Palacios Marcos Rodriguez
Didier Spezia
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Amadeus SAS
Original Assignee
Amadeus SAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US15/017,102 external-priority patent/US10095720B2/en
Priority claimed from FR1650922A external-priority patent/FR3047580B1/fr
Application filed by Amadeus SAS filed Critical Amadeus SAS
Application granted granted Critical
Publication of ES2930440T3 publication Critical patent/ES2930440T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2237Vectors, bitmaps or matrices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2272Management thereof

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Se proporciona un índice para una tabla de base de datos. El índice incluye una estructura de índice para cada columna de la tabla de la base de datos. Cada estructura de índice incluye una matriz de tuplas de puntero para cada valor que aparece en la columna y un mapa de bits que indica celdas sin valores. Un primer puntero de la tupla indica un valor y un segundo puntero indica la fila de la tabla de la base de datos con el valor. El índice también indica un orden de especificidad de las filas de la tabla de la base de datos. El sistema informático procesa una solicitud utilizando los mapas de bits de las estructuras de índice para mantener todas las filas de la tabla de la base de datos sin valores y las tuplas de puntero para filtrar todas las filas de la tabla de la base de datos que no incluyen el valor de entrada respectivo. Se selecciona y devuelve la fila más alta en el orden de especificidad de las filas restantes. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Índice de tabla de base de datos
Campo de la invención
La presente invención se refiere en general a la tecnología de bases de datos. Más especialmente, la presente invención se refiere a un índice para acceder a una tabla de base de datos en respuesta a una solicitud y para determinar el registro de datos (fila) más específico de la tabla de base de datos que cumple con la solicitud.
Antecedentes
Es conocido indexar tablas de bases de datos para acceder a registros de datos de manera directa o acelerada. Un índice es una estructura de metadatos que mejora la velocidad de las operaciones de recuperación de datos en una tabla de base de datos, a costa del espacio de almacenamiento para mantener la estructura de datos del índice. Los índices se utilizan para localizar datos rápidamente sin tener que buscar en cada fila de la tabla de base de datos cada vez que se accede a la tabla de base de datos. Los índices se pueden crear utilizando una o más columnas de la tabla de base de datos, proporcionando la base tanto para búsquedas aleatorias rápidas como para un acceso eficiente a los registros ordenados.
Una tarea particular en varias aplicaciones relacionadas con bases de datos es recuperar solo la fila de la tabla de base de datos que es la fila más específica que cumple con una solicitud de recuperación. Por lo tanto, en respuesta a una solicitud, la aplicación de la base de datos determina la fila de la tabla de base de datos que corresponde a los parámetros o criterios de entrada de la manera más específica. Con este fin, generalmente está presente en la tabla de base de datos una jerarquía de especificidad entre las filas.
Un enfoque conocido para determinar una fila más específica dentro de una tabla de base de datos utiliza el algoritmo Rete. El algoritmo Rete es un algoritmo de coincidencia de patrones que se utiliza, por ejemplo, para implementar sistemas de reglas de producción (por ejemplo, planificación automatizada, sistemas expertos y sistemas de selección de acciones). Se utiliza con el fin de determinar todas las reglas que coinciden con los criterios de entrada. Posteriormente, se realiza una denominada "resolución de conflictos" que utiliza un orden entre las reglas determinadas para identificar la regla que se va a devolver.
El documento EP 1304849 A2 se relaciona con un método para filtrar paquetes de datos y encontrar una regla que coincida con un paquete de datos en una base de reglas. El paquete de datos comprende campos de parámetros para identificar el paquete de datos, la base de reglas comprende una pluralidad de reglas, cada regla comprende uno o más campos de parámetros, y la regla de coincidencia es una regla cuyos valores de campo de parámetros corresponden a los valores de campo de parámetros de dicho paquete de datos La regla de coincidencia se encuentra determinando conjuntos de reglas para el paquete de datos, un conjunto de reglas que comprende las reglas con las que puede coincidir un valor de campo de parámetro del paquete de datos, y encontrando la regla con la etiqueta más pequeña que está presente en todos dichos conjuntos de reglas del paquete de datos, dicha regla con la etiqueta más pequeña que indica la regla que coincide con el paquete de datos.
El documento US 5951 651 A describe un método de filtrado para designar una de una pluralidad de reglas de filtrado de paquetes contenidas en un enrutador para enrutar un paquete de información a través de una red, cada paquete caracterizado como que tiene parámetros, el método que comprende generar uno o más conjuntos particionados, cada conjunto particionado asociado con un parámetro de paquete diferente con cada partición de un conjunto que tiene cero o más reglas de filtro asociadas, generar un vector correspondiente a cada uno de los parámetros, la estructura de definición del vector que indica una o más reglas de filtro potenciales a ser aplicadas, comparar cada parámetro del paquete recibido con cada partición de un conjunto particionado correspondiente y determinar una o más reglas de filtro potenciales a ser aplicadas al paquete para cada parámetro y determinar a partir de cada uno de los vectores una o más reglas de filtro potenciales idénticas asociadas con cada vector, una de las reglas de filtro idénticas capaz de ser aplicada al paquete recibido, con la regla a ser aplicada que es la regla de la prioridad más alta.
Compendio de la invención
Es un objeto de la presente invención proporcionar un índice de tabla de base de datos que facilite particularmente la determinación de la fila de tabla de base de datos más específica que cumpla con los parámetros de entrada de una solicitud de recuperación. Un objeto adicional es proporcionar un índice de tabla de base de datos que tenga una representación de datos particularmente compacta, minimizando así los requisitos de memoria. Un objeto adicional es proporcionar un índice de tabla de base de datos que aborde específicamente la arquitectura interna y el dimensionamiento de la memoria de los sistemas informáticos del estado de la técnica y que esté optimizado para ser mantenido en una memoria caché del procesador, lo que facilita un alto rendimiento en la determinación de la fila de tabla de base de datos más específica. También es un objeto proporcionar un índice de tabla de base de datos que permita el procesamiento de respuestas deterministas.
La presente invención se define en las reivindicaciones independientes. Las reivindicaciones dependientes definen realizaciones de las mismas. Cualquier "realización" o "ejemplo" que se describa en la siguiente descripción pero que no esté cubierto por las reivindicaciones se debería considerar como presentado únicamente con propósitos ilustrativos.
Breve descripción de las figuras
La presente invención se describirá con referencia a las figuras adjuntas. Los números de referencia similares generalmente indican elementos idénticos o funcionalmente similares.
La FIG. 1 ilustra una base de datos con una tabla de base de datos.
La FIG. 2 es un ejemplo genérico de una tabla de base de datos y una solicitud.
La FIG. 3 ilustra la estructura de un índice como se describe en la presente memoria.
La FIG. 4 ilustra un ejemplo genérico de un índice para la tabla de base de datos de la FIG. 2.
La FIG. 5 da un ejemplo genérico de procesamiento de solicitudes utilizando el índice.
La FIG. 6 es un diagrama de flujo de un procesamiento de solicitud ejemplar.
La FIG. 7 ilustra una disposición ejemplar de una matriz de tuplas de puntero en la memoria.
La FIG. 8 ilustra una búsqueda binaria sobre la matriz de tuplas de puntero.
La FIG. 9 ilustra una generación de índice ejemplar.
La FIG. 10 es un diagrama de flujo de alto nivel de un proceso general que incluye la generación de índices y la determinación de la fila más específica.
La FIG. 11 visualiza esquemáticamente el mantenimiento de una tabla de base de datos y un índice en las memorias de un sistema informático.
La FIG. 12 muestra una tabla de enrutamiento como ejemplo de una tabla de base de datos.
La FIG. 13 es una vista esquemática ejemplar de la arquitectura interna de un sistema informático que implementa la base de datos y/o un cliente solicitante.
Descripción detallada
El índice descrito en la presente memoria facilita el acceso a una tabla de base de datos que se mantiene por un sistema de base de datos. El término base de datos, tal como se utiliza en la presente memoria, abarca todo tipo de repositorios de datos que mantienen datos estáticos o dinámicos en forma de tablas. Estos tipos de repositorios de datos incluyen, por ejemplo, sistemas de bases de datos relacionales como bases de datos de Oracle®, Microsoft SQL Server®, Microsoft Access®, sistema de base de datos relacional de objetos tal como PostgreSQL, sistemas de reglas de producción tales como sistemas expertos y motores de sistemas de selección de acciones (por ejemplo, sistemas expertos que mantienen acciones de reparación y mantenimiento para dispositivos técnicos), elementos de red y control tales como enrutadores (con tablas de enrutamiento), nodos de gestión de red (con datos de registro y/o control mantenidos en tablas) o sistemas SCADA (que también mantienen datos de registro y/o control en forma de tablas), así como sistemas propietarios que mantienen datos, por ejemplo, en tablas simples como tales como hojas de cálculo Microsoft Excel® o archivos de texto tabulador (por ejemplo, archivos csv).
En general, la base de datos se implementa en un sistema informático, tal como un servidor de base de datos o un nodo de red. La base de datos está dispuesta para recibir solicitudes de recuperación (en lo sucesivo denominadas simplemente "solicitudes") que especifican criterios de búsqueda (en lo sucesivo denominados "valores de entrada"), para procesar la solicitud comprobando los valores de entrada con al menos una tabla de base de datos, para determinar un registro de datos de la tabla de base de datos que cumple con los valores de entrada y devolver uno o más valores de este registro de datos. Con este fin, la base de datos utiliza cualquier tipo de lenguaje de base de datos y está equipada con cualquier tipo de interfaz de comunicación conocida en la técnica. El autor de la solicitud, por ejemplo, un cliente (ordenador, estación móvil, aplicación, etc.) en una red de área local (LAN) o en una red remota consultando la base de datos 1.
Como se ilustra en la FIG. 1, una base de datos 1 mantiene al menos una tabla de base de datos 2. La tabla de base de datos 2 está formada por un número de filas 3 y un número de columnas 4. Cada fila 3 de la tabla de base de datos incluye un registro de datos y cada columna 4 de la tabla de base de datos constituye un atributo de los registros de datos, generalmente de acuerdo con un modelo de datos (tal como un modelo de gestión de base de datos relacional). La combinación de las filas 3 y las columnas 4 forma las celdas 5. Generalmente, cualquier número de filas 3 y columnas 4 puede estar presente en la tabla de base de datos 2. Como se pueden añadir o eliminar registros de datos, en particular el número de filas 3 es no es fijo, pero puede cambiar con el tiempo. La base de datos 2 también puede incluir mecanismos para redefinir o alterar el modelo de datos, es decir, también se puede adaptar el número de columnas.
Las celdas 5 de la tabla de base de datos contienen o bien al menos un valor o bien ningún valor (FIG. 2). Los valores en las celdas generalmente están de acuerdo con un tipo de datos definido para la columna respectiva, según lo prescrito por el modelo de datos. Los tipos de datos incluyen, por ejemplo, booleanos (es decir, los valores son "verdadero" y "falso"), números enteros, números de coma flotante, caracteres, cadenas, punteros, así como tipos de datos complejos y funcionales tales como fechas. Más de un valor puede estar presente en una celda 5, es decir, una celda 5 puede incluir un vector o una lista de valores, por ejemplo, en forma de matriz, registro, conjunto, enumeración u objeto de valores según un tipo de dato.
En algunas realizaciones, el sistema informático es un enrutador, la tabla de base de datos es una tabla de enrutamiento, cada fila de la tabla de enrutamiento constituye una regla de enrutamiento para enrutar una solicitud entrante hacia un destino, la tabla de enrutamiento que comprende una columna de destino con posibles valores de destino y una columna de ruta con los valores correspondientes que indican una ruta hacia el destino.
Las celdas 5 sin valores pueden incluir comodines tales como NULL o *. Estos comodines especifican la ausencia de un valor, es decir, se considera que una celda respectiva incluye cualquier valor del rango de valores permisible para el tipo de datos de las columnas correspondientes según lo prescrito en el modelo de datos. Un ejemplo de un registro de datos que usa comodines es la ruta estándar en una tabla de enrutamiento de IP que usa la dirección de red "0.0.0.0" en las columnas de dirección de destino y la máscara de subred "0.0.0.0" en las columnas de máscara de subred como comodín para cualquier posible dirección de IP de destino (véase el ejemplo de la tabla de enrutamiento de la FIG. 12).
La FIG. 2 muestra un ejemplo genérico de una tabla de base de datos 2 con seis filas 3 (es decir, seis registros de datos) y siete columnas 4 (es decir, los registros de datos tienen siete atributos). Las columnas de esta tabla de base de datos ejemplar definen cualquier tipo de atributos para los registros de datos contenidos por las filas. La primera columna 4A define un atributo clave de los registros de datos. La primera fila 3A define, por ejemplo, un registro de datos por defecto con comodines "*" en las columnas 4B a 4F y un "sí" en la última columna 4G siendo del tipo de datos booleano. Por lo tanto, la primera fila 3A especifica "sí" como respuesta por defecto. Las filas siguientes definen registros de datos más específicos. Por ejemplo, la segunda fila 3B especifica una tupla de valores "A, B" como el atributo en la segunda columna 4B y "no" como el último atributo del registro de datos, mientras que todas las demás celdas contienen comodines (despreciando la columna clave 4A), es decir cualquier valor para estos atributos cae dentro del registro de datos de la fila 3B. Por ejemplo, el modelo de datos puede definir los valores F, G, H, I, J y K como el rango de datos permisible para la tercera columna 4C. Por lo tanto, el comodín en la tercera celda del segundo registro de datos (fila 3B, columna 4C) representa todos los valores posibles F, G, H, I, J y K de este atributo del segundo registro de datos.
La tabla de base de datos 2 generalmente se almacena en una memoria del sistema informático, por ejemplo en la memoria principal (RAM).
Como se expuso al principio, el índice de la tabla de base de datos descrito en la presente memoria está particularmente dispuesto para permitir una determinación de la fila más específica correspondiente a una solicitud. En general, las filas que contienen más comodines (es decir, más valores que no son valores, menos celdas con valores) que otras filas se considera que son más inespecíficas que las filas que incluyen menos comodines (es decir, menos valores que no son valores, más celdas con valores). En otras palabras, las filas que incluyen registros de datos más generales se define que son más inespecíficas que las filas con contenido más definido, estas últimas se define que son más específicas. Para facilitar la determinación de la fila más específica que coincida con los valores de entrada de una solicitud, o bien se da o bien se establece un orden de especificidad entre las filas de la tabla de base de datos 2. Opcionalmente, el orden de especificidad está implícito en la clasificación de la fila. Por ejemplo, las filas se clasifican dentro de la tabla de inespecíficas a muy específicas, como en el ejemplo de la tabla de base de datos mostrada en la FIG. 2. En algunas realizaciones, el orden de especificidad se define explícitamente, por ejemplo, por una columna de especificidad que indica el nivel respectivo de especificidad de las filas, tales como los valores de clave en la columna de clave 4A de la tabla de base de datos 2 en la FIG. 2. Opcionalmente, el orden de especificidad es estrictamente monótono, es decir, cada fila de la tabla de base de datos tiene un orden de especificidad único. En otros ejemplos, se definen clases de especificidades y múltiples filas pueden compartir un nivel común de especificidad. En estos últimos ejemplos, está presente un mecanismo para asegurar que solo una fila de las múltiples filas que son miembros del mismo nivel de especificidad cumpla con los valores de entrada en la solicitud, por ejemplo, las filas definen registros de datos mutuamente excluyentes y los valores para un número mínimo de filas de la tabla de base de datos se indican en la solicitud.
En respuesta a la recepción de una solicitud que indique al menos columnas y valores de entrada respectivos, la base de datos 1 procesa la solicitud con los valores de entrada incluidos en la solicitud y compara los valores de entrada con la tabla de base de datos 2 para determinar la fila más específica que cumple con los valores de entrada. Haciendo referencia de vuelta a la FIG. 2, se recibe una solicitud 9 ejemplar genérica. En el ejemplo de la FIG. 2, el orden de especificidad se define explícitamente por la columna 4A que ordena las filas según los valores clave, mientras que la fila 3A es la fila más inespecífica (ya que contiene cinco comodines y solo un valor en la columna 4G), y la fila 3F es la del valor más específico (ya que no contiene ningún comodín, sino solo celdas con valores). En el ejemplo de la FIG. 2, la solicitud 9 indica las cinco columnas 4B, 4C, 4D, 4E y 4F y los respectivos valores de entrada. La base de datos 1 determina que la última fila 3F sea la fila más específica correspondiente a la solicitud 9, ya que el valor "A" en la celda 4B/3F coincide con el valor de entrada A para la columna 4B, el valor "F" en la celda 4C/3F coincide con el valor de entrada F para la columna 4C, los valores "P, R" en la celda 4D/3F coinciden con el valor de entrada P para la columna 4D, el valor "W" en la celda 4E/3F coincide con el valor de entrada W para la columna 4E y el valor "Z" en la celda 4F/3F coincide con el valor de entrada Z para la columna 4F. Las otras dos filas 3A y 3B, que también corresponden con los valores de entrada 6 de la solicitud 9, son menos específicas que la fila 3F, ya que se clasifican más abajo en la especificidad de orden implícitamente definida de la tabla de base de datos 2.
Después de que se determine la fila 3 más específica, se devuelve al menos un valor (atributo) de la fila más específica. En el ejemplo de la FIG. 2, se devuelve el valor de la columna 4G de la fila 3F, es decir, el valor booleano "no".
La determinación de la fila más específica correspondiente a una solicitud utiliza el índice 10 descrito en la presente memoria (FIG. 3). El índice de la tabla de base de datos 2 incluye los siguientes componentes:
- Hay una estructura de índice 11 para cada columna 4 de la tabla de base de datos para la que se esperan valores de entrada en una solicitud. Por lo tanto, también se hace referencia a una estructura de índice 11 como estructura de índice específica de columna en lo sucesivo. Cada estructura de índice específica de columna 11 tiene dos elementos, esto es
° una matriz de tuplas de puntero 12 y
° un mapa de bits 13 (como normalmente se entiende por el experto en la técnica, un mapa de bits es una colección de bits contiguos, es decir, una matriz de bits).
- La matriz de tuplas de puntero 12 tiene la función de hacer referencia a todos los valores en las celdas de la columna de la columna a la que se hace referencia por la estructura de índice específica de columna 11 respectiva. Cada tupla de puntero 14 en la matriz 12 incluye un primer puntero 15 y un segundo indicador 16.
° El primer puntero 15 hace referencia a uno de los valores incluidos en la columna. El valor se almacena en alguna ubicación particular en la memoria del sistema informático que alberga la base de datos 1. El primer puntero hace referencia a esta ubicación de memoria.
° El segundo puntero 16 indica la fila de la tabla de base de datos 2 en la que aparece el valor. Por ejemplo, la fila se identifica mediante un valor clave que se almacena nuevamente en una ubicación de memoria particular en la memoria del sistema informático que alberga la base de datos 1. El segundo puntero hace referencia a esta ubicación de memoria.
Por lo tanto, el número de tuplas de puntero 14 incluidas en la matriz 12 corresponde al número de valores que aparecen en la columna a la que se hace referencia por la estructura de índice específica de columna 11 respectiva. Tenga en cuenta que el término "matriz de tuplas de puntero" como se usa en la presente memoria incluye todos los tipos de implementaciones de estructuras de datos para múltiples valores, tales como listas enlazadas, registros, conjuntos de bases de datos y estructuras de datos de matriz. Cada una de las tuplas se puede implementar mediante una estructura de datos respectiva que, de nuevo, puede ser una estructura de datos de matriz, una lista enlazada, un registro o un conjunto de base de datos. Los punteros se pueden implementar mediante cualquier estructura y lenguaje de programación adecuado que haga referencia a las ubicaciones de memoria, tales como punteros de C o C++, referencias Perl o identificadores o localizadores uniformes de recursos.
- El mapa de bits 13 especifica aquellas celdas en la columna a las que se hace referencia por la respectiva estructura de índice específica de columna 11 que no tienen valores, es decir, que incluyen comodines. Por lo tanto, el mapa de bits 13 también se denomina "mapa de bits sin valor". El número de bits en el mapa de bits sin valor 13 corresponde al número de filas 3 de la tabla de base de datos 2.
Un ejemplo de un índice 10 se ilustra en la FIG. 4. El índice ejemplar mostrado por la FIG. 4 se refiere al ejemplo de tabla de base de datos genérica de la FIG. 2. El índice 10 mostrado por la FIG. 4 se compone de cinco estructuras de índice 11 correspondientes a las columnas 4B a 4F de la tabla de base de datos 2 de la FIG. 2 para las que se esperan valores de entrada 6 (la columna 4G con el tipo de datos booleano no se puede solicitar en el ejemplo de la FIG. 2 - los valores de esta columna son valores de retorno). Cada una de las estructuras de índice 11 contiene una matriz de tuplas de puntero 12 y el mapa de bits sin valor 13.
La matriz de tuplas de puntero 12 dentro de cada estructura de índice específica de columna 11 constituye una lista compacta de todos los valores incluidos en la columna respectiva de la tabla de base de datos 2. Por ejemplo, la matriz 12B dentro de la estructura de índice 11B enumera la presencia de todos los valores A, B y C que aparecen en la columna 4B. El valor A aparece en las filas con los valores clave R2, R4 y R6, el valor B está presente en las filas con los valores clave R2 y R5, y el valor C está presente en las filas con los valores clave R3 y R4 (véase la FIG. 2). Como se mencionó anteriormente, los primeros punteros en las tuplas de punteros hacen referencia a la dirección de memoria respectiva de los valores A, B y C en la memoria de ordenador, mientras que los segundos punteros en las tuplas de punteros indican la fila correspondiente, es decir, hacen referencia a los valores clave de fila en este ejemplo. Lo mismo es cierto para las otras matrices 12C a 12F en las estructuras de índice 11C a 11F.
Opcionalmente, las tuplas de puntero 14 en las matrices 12 se ordenan por el valor referenciado por los primeros punteros. En la Fig. 4, por ejemplo, las tuplas de punteros en la matriz 12B están ordenadas por los valores A, B y C que aparecen en la columna 4B. Por lo tanto, las primeras tres tuplas de puntero en la matriz 12B definen la aparición del valor A en la columna 4B, las siguientes dos tuplas de puntero definen la aparición del valor B en la columna 4B y las dos últimas tuplas de puntero definen la aparición de los valores C en la columna 4B. Ordenar las tuplas de puntero 14 dentro de la matriz 12 facilita el acceso eficiente a la memoria cuando se utiliza el índice 10, por ejemplo, para realizar una búsqueda lineal sobre las tuplas de puntero 14 porque los valores respectivos solo necesitan ser cargados una vez desde la memoria cuando se procesa la primera tupla de puntero que define las apariciones de un valor y luego están disponibles, por ejemplo, en la memoria caché del procesador para las tuplas de puntero posteriores que todavía se relacionan con el mismo valor. La clasificación de las tuplas de puntero 14 también facilita una búsqueda binaria sobre las tuplas de puntero que se utiliza en algunas realizaciones (explicadas más adelante con referencia a la FIG. 8).
Los mapas de bits 13 proporcionan una representación compacta de la aparición de la celda sin valores en la tabla de base de datos 2. Cada mapa de bits 13 incluye seis bits, coincidiendo con el número de filas 3 en la tabla de base de datos 2 en el ejemplo de la FIG. 2. Por definición, la secuencia de los bits en los respectivos mapas de bits corresponde a la secuencia de filas con valores clave R1 a R6, es decir, el primer bit en cada uno de los mapas de bits 13 se refiere a la fila con valor clave R1, el segundo bit en cada uno de los mapas de bits se refiere a la fila con el valor clave R2, y así sucesivamente, y el último bit en cada uno de los mapas de bits 13 se refiere a la última fila con el valor clave R6. En el ejemplo de la FIG. 4, los bits establecidos en '1' denotan todas las filas en la columna respectiva sin valores (es decir, con comodines), mientras que los bits establecidos en '0' denotan filas en la columna respectiva con valores (es decir, sin comodines). Por ejemplo, el mapa de bits 13B indica que solo la primera fila (valor clave R1) en la columna 4B no incluye un valor, mientras que las otras filas (valores clave R2 a R6) incluyen valores. Lo mismo se aplica a los otros mapas de bits 13C a 13F de una manera análoga para las celdas sin valor en las columnas 4C a 4F.
El índice 10, como se ha descrito anteriormente, representa una estructura de metadatos particularmente compacta (cuando se compara con los índices del estado de la técnica actualmente conocidos). En algunas realizaciones, el índice se almacena en una memoria caché del procesador del sistema informático y sigue estando almacenado en la memoria caché del procesador después de que el valor de al menos una celda de la fila determinada se haya devuelto para que esté disponible para procesar solicitudes adicionales. La ubicación de las celdas sin valores no se almacena como tuplas de puntero 14, sino en forma de mapas de bits 13 que disminuyen el número de tuplas de puntero 14. El tamaño de una tupla de puntero 14 siempre es una potencia de 2. Por ejemplo, un puntero tiene el tamaño de 8 bytes en una arquitectura de memoria moderna de 64 bits, lo que equivale al tamaño de 16 bytes para una tupla de puntero 14. Como la multiplicación de enteros para el número de tamaño de potencia de 2 es más eficiente que para números de tamaño no potencia de 2, los accesos aleatorios en el índice 10 son eficientes. Para ciertas clases de tablas de bases de datos (por ejemplo, tablas con 1000 entradas o menos), el índice 10 encajará en las memorias caché de la CPU de L1 y/o L2 y, por lo tanto, puede estar disponible permanentemente en una memoria de acceso muy rápido y, por lo tanto, mejorar el rendimiento general del procesamiento de solicitudes y la determinación de filas. Además, el índice 10 facilita un algoritmo de búsqueda binaria para determinar la fila más específica, como se describirá más adelante (con referencia a la FIG. 8).
El índice 10 también indica el orden de especificidad de las filas 3 de la tabla de base de datos 2. Se prevén varias formas para esta indicación. Por ejemplo, como se mencionó anteriormente con referencia a la FIG. 2, la propia tabla de base de datos 2 ya está ordenada de acuerdo con su orden de especificidad, por ejemplo, de menor a mayor especificidad (véase también la actividad 38 en la FIG. 9 y la actividad 17 en la FIG. 10). En tales realizaciones, el orden de especificidad de las filas de la tabla de base de datos está implícitamente presente en el índice 10 dentro de los mapas de bits 13 sin valor. Como se explicó anteriormente, los mapas de bits 13 sin valor incluyen un bit para cada fila 3 de la tabla de base de datos2 y el orden de los bits en los mapas de bits 13 corresponde al orden de las filas 3 de la tabla de base de datos 2. Por lo tanto, el primer bit respectivo en los mapas de bits 13 se refiere a la primera fila (por ejemplo, la fila 3A en la FIG. 2) que es, por ejemplo, la fila menos específica y el último bit respectivo en los mapas de bits sin valor 13 se refieren a la última fila (por ejemplo, la fila 3F en la FIG. 2) que es, por ejemplo, la fila más específica de la tabla de base de datos 2. En otras realizaciones, las filas de la tabla de base de datos 2 no están ordenadas por especificidad, pero el índice 10 incluye una estructura de datos separada que define el orden de especificidad de las filas 3. Por ejemplo, los valores de ponderación 7 (ver FIG. 3) se asocian con las filas 3 cuando se genera el índice 10 (ver también la actividad 44 en la FIG. 9) y se mantienen explícitamente como metadatos que definen el orden de especificidad de las filas 3 dentro del índice 7.
En respuesta a la recepción de una solicitud 9, el sistema informático que alberga la base de datos 1 utiliza el índice 10 para determinar la fila más específica de la siguiente manera. En general, se realiza un proceso incremental que procesa la solicitud por columnas, para cada columna (y respectivo valor de entrada 6) indicada en la solicitud 9.
A partir de la primera columna 4 indicada en la solicitud 9 (columna 4B con valor de entrada "A" en el ejemplo de la FIG. 2), el sistema informático utiliza el mapa de bits 13 de la estructura de índice 11 para la primera columna (estructura de índice 11B con mapa de bits 13B en el ejemplo de la FIG. 2) para asegurar que todas las filas 3 de la tabla de base de datos 2 que no contienen un valor no se descartan porque estas filas incluyen comodines que abarcan cualquier valor de entrada. Por lo tanto, en el ejemplo de las FIGS. 2 y 4, la fila R1 (indicada por el '1' en el mapa de bits 13B) se mantiene definitivamente. En este punto, no se toma ninguna decisión en cuanto a mantener o descartar las otras filas marcadas con un '0' en el mapa de bits 13B.
A continuación, además de mantener las filas según la utilización del mapa de bits sin valor, las tuplas de puntero 14 de la estructura de índice 11 para la primera columna (estructura de índice 11B con matriz de tuplas de puntero 12B en el ejemplo de la FIG. 2) se utilizan para mantener todas las filas 3 que incluyen el valor de entrada respectivo (valor de entrada "A" en el ejemplo de la FIG. 2) y para filtrar todas las filas 3 de la tabla de base de datos 1 que no incluyen el valor de entrada 6. En el ejemplo de las FIGS. 2 y 4, se mantienen todas las filas que incluyen el valor "A" (esto es, las filas R2, R4 y R6), mientras que las filas restantes que no contienen el valor de entrada "A" en la columna 4B (filas R3 y R5) se descartan.
La contabilidad de las decisiones de mantenimiento y descarte a lo largo de este proceso incremental se basa, en algunas realizaciones, en mapas de bits temporales adicionales (a los que se hace referencia como mapas de bits de resultado, descritos en detalle más adelante) que indican las filas que aún se mantienen y las filas que ya se descartan.
Este proceso se repite para cada columna 4 indicada en la solicitud 9. En cada iteración, ninguna, una o más filas 3 de la tabla de base de datos 2 se descartan. Después de que se hayan procesado todas las columnas 4 indicadas en la solicitud 9, quedan una o más filas 3 que cumplen con los valores de entrada indicados en la solicitud. El sistema informático selecciona entonces, utilizando el índice 10, una fila 3 de las filas restantes que es la más alta en el orden de especificidad. En el ejemplo de las FIGS. 2 y 4, las filas 3A, 3B y 3F (es decir, filas con valores clave R1, R2 y R6) cumplen los valores de entrada 6 de la solicitud 9 ejemplar mostrada en la FIG. 2. La fila más específica es la fila 3F (valor clave R6). En el ejemplo de las FIGS. 2 y 4, el orden de especificidad se da por la clasificación de las filas que también se refleja en el índice 10 (en los mapas de bits 13, así como en los mapas de bits de resultados descritos a continuación). Así, en el ejemplo de las FIGS. 2 y 4, el sistema informático selecciona la fila restante con el valor de clave más alto (que se encuentra más a la derecha en los mapas de bits 13 y en el mapa de bits de resultados descrito a continuación).
A continuación, se describe un ejemplo de implementación del procesamiento de solicitudes incrementales y el proceso de determinación de filas con referencia a la FIG. 5. Este ejemplo reutiliza de nuevo la tabla de base de datos 2 ejemplar de la FIG. 2 y el índice 10 correspondiente como se muestra en la FIG. 4, este último que está representado en el lado izquierdo de la FIG. 5. En general, el ejemplo de procesamiento de solicitudes se basa en dos mapas de bits adicionales para utilizar las tuplas de puntero 14 y los mapas de bits sin valor, esto es, un mapa de bits de columna 23 y un mapa de bits de resultado 25. Tanto el mapa de bits de columna 23 como el mapa de bits de resultado 25 incluyen un número de bits que corresponde al número de filas en la tabla de base de datos 2. El propósito del mapa de bits de columna 23 es indicar, durante cada iteración a través de las columnas 4 y el valor de entrada correspondiente 6 indicado en la solicitud 9, esas filas 3 de la tabla de base de datos 2 que incluye el valor de entrada respectivo. El propósito del mapa de bits de resultado 25 es indicar, a lo largo del procesamiento de la solicitud incremental, las filas 3 restantes de la tabla de base de datos que aún son filas candidatas que cumplen potencialmente con todos los valores de entrada 6 incluidos en la solicitud 9 y, al mismo tiempo, para indicar todas las filas 3 de la tabla de base de datos 2 que se han filtrado porque no se corresponden con uno o más de los valores de entrada 6.
El procesamiento de la solicitud comienza con la inicialización del mapa de bits de resultado 25, por ejemplo, establecer todos los bits del mapa de bits de resultado 25 en '1', mientras que cada '1' indica que la fila 3 asociada con el bit respectivo en el mapa de bits de resultado 25 aún no se ha filtrado, es decir, sigue siendo una fila candidata que cumple potencialmente con todos los valores de entrada 6 incluidos en la solicitud 9. Por lo tanto, al comienzo del procesamiento de la solicitud, todas las filas 3 de la tabla de base de datos 2 son candidatas válidas.
A continuación, se pasa la primera iteración relativa a la primera columna y el respectivo valor de entrada 6 (en el ejemplo de las FIGS. 2 y 4: columna 4B con valor de entrada 6B = "A"), que está formada por dos actividades que utilizan la estructura de índice respectiva (aquí: estructura de índice 11B). La primera actividad se refiere a la determinación de qué filas 3 de la tabla de base de datos 2 cumplen con el valor de entrada actual 6B. La segunda actividad se refiere a la contabilidad de las filas candidatas restantes mantenidas a lo largo de todas las iteraciones.
En cuanto a la primera actividad, el mapa de bits de columna 23B se inicializa con los valores de bits del mapa de bits sin valor 13 de la columna 4 considerados durante la iteración actual (aquí: columna 4B, mapa de bits sin valor 13B). Por lo tanto, en el ejemplo, el mapa de bits de columna 23B se establece en 1-0-0-0-0-0 y, por lo tanto, indica que la fila 3A (valor clave R1) es definitivamente para ser mantenido (porque incluye un comodín en la columna 4B). A continuación, se busca en la matriz de tuplas de puntero 12B todas las filas que incluyen el valor de entrada "A".
En algunas realizaciones, esta búsqueda es una búsqueda binaria (explicada más adelante con referencia a la FIG.
8). En otras realizaciones, esta búsqueda es una búsqueda lineal. En el ejemplo, la búsqueda en la matriz de tuplas de puntero 12B produce que las filas con valores clave R2, R4 y R6 incluyan una "A" en la columna 4B actualmente considerada. En consecuencia, los bits en el mapa de bits de columna 23B correspondientes a las filas que se ha determinado que incluyen el valor de entrada 6B también se establecen en '1', ya que cumplen con el primer valor de entrada 6B y por lo tanto se han de mantener. Por lo tanto, en el ejemplo, el segundo, cuarto y sexto bit del mapa de bits de columna 23B se establecen en '1', el mapa de bits de columna 23B ahora se establece en 1-1-0-1-0-1, lo que significa que la primera, segunda, cuarta y sexta fila (valores clave R1, R2, R4 y R6) siguen siendo filas candidatas, mientras que la tercera y quinta fila (valores clave R3 y R5) se filtran. En este punto, el mapa de bits de columna 23B indica, para la iteración actual, todas las filas que cumplen con el primer valor de entrada 6B incluido en la solicitud 9.
Con respecto a la segunda actividad, el mapa de bits de columna 23B establecido se combina con la versión actual del mapa de bits de resultado 25 con el fin de incluir el resultado de determinación de fila de la iteración actual en la contabilidad general de las filas candidatas. En el ejemplo, todas las filas candidatas restantes se indican mediante bits establecidos en '1', mientras que todas las filas filtradas se indican mediante bits establecidos en '0'. Por lo tanto, se realiza una operación AND lógica bit a bit entre el mapa de bits de columna 23B y la versión actual del mapa de bits de resultado 25, dando como resultado una versión actualizada 25B del mapa de bits de resultado. En el ejemplo, la versión actualizada 25B del mapa de bits de resultado se establece así en 1 -1-0-1 -0-1.
Esto concluye la primera iteración relativa a la primera columna indicada en la solicitud 9 y el valor de entrada 6 correspondiente. Las iteraciones posteriores se realizan de la misma manera. Nuevamente, durante cada una de las siguientes iteraciones, el mapa de bits de columna 23 se reinicializa con los valores de bits de los respectivos mapas de bits sin valor (en el ejemplo, los mapas de bits sin valor 13C a 13F, inicializando las versiones 23C a 23F de los mapas de bits de columna). Luego, se busca en la respectiva matriz de tuplas de puntero (en el ejemplo, matrices 12C a 12F) las apariciones de los respectivos valores de entrada incluidos en la solicitud 9 (en el ejemplo, valores de entrada 6C a 6F). Los bits respectivos correspondientes a filas que incluyen el valor de entrada 6 respectivo se establecen en '1' en el mapa de bits de columna 23. La versión resultante 23C-23F respectiva del mapa de bits de columna se combina con la versión actual 25C-25F respectiva del mapa de bits de resultado por la operación AND bit a bit.
En el ejemplo, la versión final del mapa de bits de resultado 25F indica que la primera fila, la segunda fila y la sexta fila cumplen con todos los valores de entrada 6 incluidos en la solicitud 9. La última actividad del procesamiento de la solicitud se refiere a la selección de la fila más específica entre las filas restantes después de que se hayan concluido las iteraciones. Con este fin se utiliza la indicación del orden de especificidad dentro del índice 10. En el ejemplo, el orden de especificidad se da por la clasificación de las filas 3 de la tabla de base de datos 2 que se refleja en la secuencia de los bits (correspondientes a las filas) en los mapas de bits sin valor 13, en el mapa de bits de columna 23 y en el mapa de bits de resultado 25. Así, en el ejemplo, la fila más específica entre las filas candidatas restantes se da por el '1' más a la derecha (número de referencia 27) en la versión final 25F del mapa de bits de resultado.
Aunque este procesamiento de solicitudes implica un número de operaciones que tienen una complejidad de O(n), tiene varias características técnicas ventajosas. Solo se necesita una cantidad limitada de espacio de memoria para realizar las operaciones. Los dos mapas de bits adicionales, el mapa de bits de columna 23 y el mapa de bits de resultado 25 incluyen un número de bits correspondiente al número de filas de la tabla de base de datos 2. Por lo tanto, para una tabla de base de datos con, por ejemplo, 1024 filas, el mapa de bits de columna 23 y el mapa de bits de resultado 25 tienen un tamaño de 128 Bytes cada uno. Además, el procesamiento de la solicitud es determinista porque el número de iteraciones de la columna de la base de datos está predeterminado por el número de columnas de la tabla de base de datos y las columnas indicadas en la solicitud, respectivamente. Por lo tanto, para tablas de bases de datos con cierto número de filas, el tiempo de respuesta del procesamiento de cada solicitud es determinista.
Además, el número de operaciones de búsqueda y operaciones de comparación de valores (comparación de valores de entrada con valores referenciados por los respectivos primeros punteros 15) para buscar en las matrices de tuplas de puntero 12 la presencia de valores de entrada 6 se reduce a favor de las operaciones de mapa de bits (tales como las operaciones AND lógicas bit a bit). Aunque las operaciones de mapa de bits implican operaciones O(n), n es relativamente pequeño (correspondiente al número de filas 3), y la operación de mapa de bits generalmente explota completamente las capacidades del hardware informático moderno. Por ejemplo, las instrucciones individuales del ensamblador de arquitecturas de 64 bits procesan 64 bits a la vez. Además, el presente procesamiento de solicitudes se adapta específicamente a las CPU que están equipadas con unidades informáticas OOO (fuera de servicio) que tienen la capacidad de realizar varios cálculos por ciclo de reloj en un solo núcleo, siempre que no haya dependencia entre esos cálculos. Esta última condición se aplica a las operaciones de mapa de bits que, debido a que cada una de una operación AND individual por bit dentro de una operación AND global entre el mapa de bits de columna 23 y el mapa de bits de resultado 25, son independientes entre sí.
La reducción de la parte de las operaciones de búsqueda y consulta en beneficio de una mayor parte de las operaciones de mapa de bits también aborda específicamente una disposición de extensión de vectores de las CPU, en particular de las CPU que están equipadas con un conjunto de instrucciones de SSE2 (Extensiones de SIMD de Difusión en Forma Continua, SIMD = Instrucción única, datos múltiples) ofrece la capacidad de procesar 128 bits en una instrucción de ensamblador, un conjunto de instrucciones de AVX2 (Extensiones de Vector Avanzadas) para procesar 256 bits en una instrucción de ensamblador o AVX-512 (por ejemplo, generación "Knights Landing" de Intel®) que permite el procesamiento de 512 bits en instrucciones de un ensamblador. Por ejemplo, con este último conjunto de instrucciones, se puede realizar una operación AND bit a bit entre el mapa de bits de columna 23 y el mapa de bits de resultado 25 para una tabla de base de datos 2 con 1000 filas dentro de dos ciclos de CPU.
La operación de este procesamiento de solicitudes se visualiza mediante el diagrama de flujo de la FIG. 6. Primero, en 20, el sistema informático que alberga la base de datos 1 recibe una solicitud 9. En respuesta a la recepción de la solicitud, el mapa de bits resultante 25 se inicializa en 22. Luego, se realiza el proceso incremental 24. Dentro de la iteración por columnas para cada columna y el valor de entrada 6 respectivo indicado en la solicitud 9, el mapa de bits de columna 23 se inicializa en 24A, en base al mapa de bits sin valor 13 respectivo. Luego, en 24B, la matriz de tuplas de puntero 12 es busca todas las filas 3 de la columna 4 actual que incluyen el valor de entrada 6 respectivo, y el mapa de bits de columna 23 se actualiza en consecuencia. Luego, en 24C, el mapa de bits de columna 23 y la versión actual del mapa de bits de resultado 25 se combinan, por ejemplo, por la operación AND lógica bit a bit, con el fin de obtener un mapa de bits de resultado actualizado. Después de que todas las columnas 4 y los respectivos valores de entrada 6 indicados en la solicitud 9 hayan sido procesados de esta manera incremental, la más específica de las filas restantes indicadas en la versión final del mapa de bits de resultado 25 se selecciona en 26. Finalmente, en 35, en se devuelve al menos un valor de la fila más específica determinada. También es posible que el mapa de bits resultante solo contenga bits '0' después de la última iteración del procesamiento de la solicitud. En este caso, ninguna de las filas de la tabla de base de datos cumple con la solicitud y, por lo tanto, el valor de retorno es un valor 'no coincidente'.
En algunas realizaciones, la asignación de bits en los mapas de bits sin valor 13 es inversa (en comparación con el ejemplo de la FIG. 4), es decir, los bits establecidos en '0' indican todas las filas en la columna respectiva sin valores (es decir, con comodines), mientras que los bits establecidos en '1' indican filas en la columna respectiva con valores (es decir, sin comodines). En estas realizaciones, también se invierte la asignación de bits en el mapa de bits de columna 23 y en el mapa de bits de resultado 25, es decir, todos los bits establecidos en '0' en el mapa de bits de columna 23 indican filas 3 de la columna considerada que incluyen el valor de entrada respectivo 6 y cada '0' en el mapa de bits de resultado 25 indica que la fila 3 asociada con el bit respectivo aún no se ha filtrado, es decir, todavía es una fila candidata que cumple potencialmente con todos los valores de entrada 6 incluidos en la solicitud 9. En consecuencia, en estas realizaciones, el mapa de bits de columna 23 y el mapa de bits de resultado 25 se combinan mediante una operación OR lógica bit a bit.
En algunas realizaciones, el procesamiento de solicitud incremental (actividad 24 en la FIG. 6) y, en particular, la búsqueda en las matrices de tuplas de puntero 12 para detectar la presencia de un valor de entrada (actividad 24B en la FIG. 6) incluye una búsqueda binaria dentro de las tuplas de puntero 14 que se almacenan de forma contigua en una memoria del sistema informático que alberga la base de datos 1 (FIGS. 7 y 8). La FIG. 7 muestra un ejemplo genérico de tuplas de puntero 14 que se almacenan contiguamente en alguna ubicación en la memoria 28 del sistema informático que alberga la base de datos 1. Como se visualiza mediante la representación esquemática de la FIG. 7, cada tupla de puntero 14 individual está dispuesta consecutivamente en la memoria 28 dentro de la matriz de tuplas de puntero 12, sin espacios intermedios. Esta disposición de las tuplas de puntero 14 en la memoria 28 facilita el acceso directo a la n-ésima tupla de puntero (es decir, cualquier tupla de puntero arbitraria con la matriz 12) y, así, facilita una búsqueda binaria para cada iteración por columnas de la solicitud 9.
La FIG. 8 ilustra un ejemplo genérico de búsqueda binaria para la actividad 24B de la FIG. 6. Como se mencionó anteriormente con referencia a la FIG. 4, las tuplas de punteros 14 dentro de la matriz 12 se clasifican por los valores referenciados por los primeros punteros 15 (clasificación de los tipos de datos respectivos de las columnas 4, por ejemplo, orden alfabético de caracteres y cadenas), lo que permite la ejecución de una búsqueda binaria sobre las tuplas de puntero 14. De acuerdo con el principio de divide y vencerás, el algoritmo de búsqueda binaria entra en el medio de la matriz 12 y examina si el valor referenciado por el primer puntero 15D de la tupla de puntero 14D ubicada en el medio de la matriz 12 corresponde o no al valor de entrada 6. En el ejemplo de la FIG. 8, el valor de entrada "A" se compara así con el valor "D" referenciado por el primer puntero 15D. Si el valor de entrada 6 es inferior al valor referenciado por el primer puntero 15 considerado, se repite el mismo procedimiento en la mitad superior (mitad izquierda de la matriz 12 en la FIG. 8, es decir, con el primer puntero 15B). Si el valor de entrada 6 es mayor que el valor referenciado por el primer puntero 15 considerado, se repite el mismo procedimiento en la mitad inferior de la matriz 12 (mitad derecha de la matriz 12 en la FIG. 8, es decir, con el primer puntero 15F).
Como se muestra en los ejemplos de las FIGS. 4 y 5, es posible que múltiples primeros punteros 15 hagan referencia al mismo valor. En el ejemplo de las FIGS. 7 y 8, los primeros punteros 15A y 15B ambos hacen referencia al valor "A". Por lo tanto, si la comparación entre el valor de entrada 6 y el valor referenciado por el primer puntero 15 actualmente considerado en una etapa particular de la búsqueda binaria muestra que ambos valores son iguales, la búsqueda binaria aún no se termina en ese punto. Más bien, la búsqueda binaria continúa determinando potenciales tuplas de puntero 14 adicionales y primeros punteros 15 que también hacen referencia al valor de entrada 6. Por lo tanto, después de haber encontrado una coincidencia entre el valor de entrada 6 y el valor referenciado por un primer puntero 15, las tuplas de puntero 14 vecinas ubicadas a izquierda y derecha de la tupla de puntero actualmente considerada (siempre que estén presentes) se examinan hasta que se determina una no coincidencia entre el valor de entrada 6 y el valor referenciado por el primer puntero respectivo o el algoritmo llega a una tupla de puntero 14 ya considerada antes. En el ejemplo de la FIG. 8, el examen del primer puntero 15B (que se realiza después del examen del primer puntero 15D) produce una coincidencia entre el valor de entrada "A" y el valor "A" referenciado por el primer puntero 15B. En esta situación, se determina entonces si los primeros punteros 15A y 15C también hacen referencia al valor "A". Esto es afirmativo para el primer puntero 15A y negativo para el primer puntero 15C. Por lo tanto, la búsqueda binaria en el ejemplo de la FIG. 8 termina después de que se haya encontrado que el valor "A" está presente en las filas R1 y R4 de la columna 4 considerada. Los primeros punteros 15D, 15B, 15A y 15C han sido comprobados durante la ejecución de la búsqueda binaria.
La búsqueda binaria empleada por algunas realizaciones tiene la complejidad computacional de O(log n) y, por lo tanto, generalmente es más eficiente como, por ejemplo, una búsqueda lineal que tiene una complejidad de O(n). En algunas realizaciones, la búsqueda binaria se implementa de una manera recursiva. En otras realizaciones, la búsqueda binaria se implementa de una manera iterativa.
En algunas realizaciones, el sistema informático que alberga la base de datos 1 está dispuesto para generar el índice 10 a partir de la tabla de base de datos 2. El índice 10 generado después de que la tabla de base de datos 2 se haya establecido por primera vez y luego posteriormente en respuesta a un cambio de la tabla de base de datos 2, tal como un cambio de uno o más valores en las celdas 5, reemplazo de uno o más valores por un comodín o viceversa, añadir o eliminar una fila 3 o una columna 4, etc.
En general, la generación de índices incluye el establecimiento de una estructura de índice 11 para cada columna 4 de la tabla de base de datos 2, cuyas solicitudes 9 pueden incluir valores de entrada 6. En correspondencia con la estructura del índice 10, este proceso incluye principalmente dos actividades, esto es, la inicialización y el establecimiento de los mapas de bits sin valor 13 de cada estructura de índice 11 y el estableciendo de la matriz de tuplas de puntero 12 con el primer puntero 15 y el segundo puntero 16 respectivos en las tuplas de puntero 14. Un ejemplo de la generación de índices se muestra en la FIG. 9. Opcionalmente, para realizaciones con orden de especificidad explícito o implícito dado teniendo las filas 3 de la tabla de base de datos 2 ordenadas de acuerdo con el orden de especificidad, las filas de la tabla de base de datos 2 se ordenan en 38 (en caso de que esto no se haya hecho de antemano). Generalmente, ordenar las filas de la tabla de base de datos depende de un número de celdas en cada fila 3 sin valores (es decir, con comodines) y/o una especificidad de los valores en las celdas 5 de la fila 3. Más específicamente, en algunas realizaciones, se ponderan las filas 3 de la tabla de base de datos 2. Cada celda contribuye a la ponderación de una fila en donde una fila sin un valor añade menos ponderación que cada celda con al menos un valor y, en algunas realizaciones más específicas, las celdas con una número mayor de valores/valores más específicos añaden menos ponderación a la fila que las celdas con un número menor de valores/valores menos específicos. La secuencia de filas con valores de ponderación idénticos se elige de una forma arbitraria. En algunas realizaciones, la indicación del orden de especificidad se da por un orden de fila único que indica las filas clasificadas, tal como en el ejemplo de la FIG. 2 (columna 4A). Esta indicación de orden de filas puede funcionar como una clave primaria de la tabla de base de datos 2.
La generación del índice real comienza entonces con la inicialización del primer mapa de bits 13 sin valor al que se puede hacer referencia mediante una solicitud 9 (por ejemplo, el mapa de bits 13B con relación a la columna 4B, con referencia de vuelta al ejemplo de la FIG. 4). La inicialización de mapa de bits se relaciona, por ejemplo, para asignar la cantidad requerida de memoria, por ejemplo, en la memoria principal del sistema informático que alberga la base de datos 1 y, por ejemplo, establecer todos los bits en el mapa de bits 13 en '0' indicando inicialmente que no hay ninguna celda en la columna 4 sin valor. Luego, en 40, la matriz de tuplas de puntero 12 (por ejemplo, la matriz 12B de la FIG. 4) se llena con las tuplas de puntero. Se añade una tupla de puntero 14 a la matriz 12 por cada valor que aparece en las filas 3 de la columna 4 considerada. En 41, el mapa de bits sin valor 13 se actualiza con el fin de reflejar todas las celdas de la columna sin valor. Por ejemplo, todos los bits correspondientes a las celdas sin valor se establecen en '1'. Opcionalmente, en 42, las tuplas de puntero 14 en la matriz 12 se ordenan por los valores referenciados por los respectivos primeros punteros 15. En ese punto, la estructura de índice 11 para la primera columna (es decir, la estructura de índice 11B en el ejemplo de la FIG. 4) se genera completamente. En 43, se comprueba si la tabla de base de datos 2 tiene o no una columna adicional para la que se va a establecer una estructura de índice 11. Si esto es afirmativo, las actividades 39 a 42 se repiten para esta columna 4 adicional (por ejemplo, la columna 4C en el ejemplo de la FIG. 4) de la misma manera, hasta que se hayan generado estructuras de índice 11 para todas las columnas 4 de la tabla de base de datos que se pueden indicar en una solicitud 9.
Opcionalmente, en realizaciones sin filas ordenadas 3 (es decir, no se realizó la actividad 38), se crea en 44 una matriz de valores de ponderación 7 que indica explícitamente el orden de especificidad de las filas 3. En realizaciones que permiten que varias filas compartan el mismo valor de ponderación y varias filas con ponderación idéntica corresponden a la solicitud 9, o bien se selecciona una fila arbitraria entre las filas con el misma ponderación para que sea la fila más específica, o bien está presente un mecanismo para permitir solo combinaciones de valores disjuntos para las filas con la misma ponderación con el efecto de que siempre solo una fila en un nivel de ponderación particular corresponde a una solicitud 9.
La FIG. 10 presenta un flujo de alto nivel ejemplar de un proceso general realizado por el sistema informático que alberga la base de datos 1 con al menos una tabla de base de datos 2. En 17, las filas de la tabla de base de datos se clasifican con el fin de constituir el orden de especificidad de las filas que se refleja en el índice 10. En 18, se genera el índice 10 (véase el ejemplo de la FIG. 9). En un punto de tiempo posterior, se recibe una solicitud 9 por el sistema informático, la solicitud que indica al menos un valor de entrada 6 para una columna 4 de la tabla de base de datos 2. En 19, la solicitud se procesa sobre la base del índice 10 con el fin de determinar todas las filas 3 de la tabla de base de datos 2 que corresponden al valor o valores de entrada de la solicitud 9, por ejemplo, por la actividad 22 y la actividad incremental 24 mostrada en la FIG. 6. En 34, se selecciona la fila más específica de las filas restantes que son resultado de la actividad 19, utilizando el orden de especificidad reflejado en el índice 10, por ejemplo, en la manera de la actividad 26 mostrada en la FIG. 6. En 21, se devuelven uno o más valores de la fila más específica seleccionada.
La disposición de los diversos datos de la base de datos 1 dentro de la memoria del sistema informático 100 que alberga la base de datos 1 se representa en la FIG. 11. El sistema informático 100 tiene una memoria direccionable 30, que incluye, por ejemplo, la memoria principal o memoria operativa (RAM) del sistema informático 100. El sistema informático 100 mantiene la tabla de base de datos 2 en la memoria direccionable 30, en algunas realizaciones en la RAM. El procesamiento de solicitudes y la determinación de la fila más específica se realizan por la unidad central de procesamiento (CPU) 31. La CPU 31 incluye al menos un nivel de memoria caché de procesador 32, en algunas realizaciones al menos tres niveles (caché L1, L2, caché, L3) de diferentes tamaños y velocidades de acceso. El índice 10 con las estructuras de índice 11 para las columnas 4 de la tabla de base de datos 2 también está ubicado en la memoria direccionable 30 del sistema informático 100, en algunas realizaciones en uno de al menos un nivel de memoria caché del procesador.
La implementación de índice presentada en la presente memoria es superior a otros mecanismos de índice en términos de requisitos de memoria/compacidad, como se verá a partir de la siguiente comparación con implementaciones de índice de última generación. La comparación se basa en una tabla de base de datos 2 con 1024 filas y cinco columnas que pueden ser objeto de una solicitud 9 con valores arbitrarios. La tabla de base de datos utilizada para la comparación incluye proporciones típicas del número de celdas sin valor del 66%, el número de celdas con más de un valor del 10% y un tamaño promedio de los valores. Se utiliza la misma tabla de base de datos 2 para todas las implementaciones comparadas. La implementación del índice que se presenta en la presente memoria se compara con otras dos formas conocidas de indexar las filas de la tabla de base de datos:
• Árboles Rojos-Negros, que es una estructura de datos asociativa conocida para la indexación. La implementación se basa en C++ std::map, proporcionado con GCC 4.3.2 STL.
• Árboles B, que es otra estructura de datos asociativa para la indexación que se utiliza para mejorar la ubicación de los datos en una memoria o en un disco. La implementación se basa en "klib" attractivechaos, que se sabe que tiene un buen rendimiento (ver https://github.com/attractivechaos/klib/blob/master/kbtree.hi). Se eligió un factor de agregación de 256 ítems que es un buen compromiso entre eficiencia y compacidad.
Los tres enfoques mostraron la siguiente huella de memoria (1 byte de precisión) para los diferentes índices (todos los valores se expresan en bytes):
Figure imgf000011_0001
El tamaño de la memoria caché de L1 de la CPU de Intel® de última generación actual es de 32 KB. Así, cada una de las estructuras de índice del índice 10 como se presenta en la presente memoria para una tabla de base de datos 2 con 1024 y más cabe en la memoria caché de L1 de este tamaño, mientras que este no es el caso para las implementaciones de Árboles Rojos-Negros y Árboles B.
El tamaño de una memoria caché de L2 actualmente disponible es de 256 KB. Así, todas las estructuras de índice juntas del índice 10 como se presenta en la presente memoria para una tabla de base de datos 2 con 1024 y más caben en la memoria caché de L2 de este tamaño, mientras que este no es el caso para la implementación de Árboles Rojos-Negros. Aunque el índice basado en Árboles B para una tabla de base de datos 2 con 1024 filas cabe en la memoria caché de L2 de este tamaño, virtualmente no queda espacio en la memoria caché de L2 para los valores de la tabla de base de datos 2 y las estructuras de datos contables tales como el mapa de bits de columna 23 y el mapa de bits de resultado 25.
Mientras que los metadatos del índice completo y la tabla de base de datos 2 completa caben en la memoria caché de L3 (varios MB, dependiendo del modelo de CPU) para las tres implementaciones de índice comparadas anteriormente, se ha de tener en cuenta que la memoria caché de L3 se comparte entre los núcleos de la CPU y está sujeto a la sobrecarga de sincronización. Por lo tanto, el acceso a la memoria caché de L3 es generalmente significativamente más lento que el acceso a la memoria caché de L1 (generalmente de 10 a 20 veces más lento) y más lento que el acceso a la memoria caché L2 (generalmente de 4 a 8 veces más lento). Así, la compacidad de la memoria inherente al índice 10 presentado en la presente memoria permite mantener el índice completo o al menos una parte significativamente mayor del índice (en comparación con las otras dos implementaciones de índice conocidas mencionadas anteriormente) en la memoria caché de L1 y/o L2 que constituye un rendimiento sustancialmente mayor del mecanismo de procesamiento de solicitudes con el fin de determinar la fila más específica de la tabla de base de datos 2 correspondiente a la solicitud 9.
El índice 10 y los mecanismos de procesamiento de solicitudes basados en el índice 10 presentados en la presente memoria se pueden aplicar a todo tipo de diferentes bases de datos y sistemas similares a bases de datos, por ejemplo, un enrutador con una tabla de enrutamiento. La FIG. 12 muestra una tabla de enrutamiento 33 ejemplar de un enrutador de IP (es decir, un enrutador en la capa de red del modelo de referencia de OSI), pero el presente índice 10 también es aplicable a cualquier otro tipo de enrutador o tipos más específicos, tales como enrutadores lógicos y enrutadores de software (por ejemplo, Buses de Servicio Empresarial, ESB), enrutadores de hardware y enrutadores troncales, conmutadores de alta gama, enrutadores de DSL, enrutadores de WiFi, etc.
La tabla de enrutamiento 33 de la FIG. 12 es un ejemplo simple de una tabla de base de datos 2, que tiene cinco filas y cinco columnas. Las columnas, de izquierda a derecha, definen la dirección de destino, la máscara de subred, el siguiente salto (por ejemplo, el siguiente enrutador), la interfaz de red de salida del enrutador, así como una indicación métrica. Como se sabe por el experto en la técnica, la dirección de destino y la máscara de subred juntas forman una dirección de red (la máscara de subred indica el rango de bits de prefijo que constituyen la dirección de red, mientras que los bits restantes forman la dirección de ordenador central). Los paquetes de IP entrantes se enrutarán a un destino a partir de las solicitudes 9. El enrutador examina la dirección de IP de destino de un paquete de IP entrante y la comprueba frente a la tabla de enrutamiento 33. En este sentido, el enrutador determina la fila más específica de la tabla de enrutamiento 33 con una dirección de red (es decir, la dirección de destino en la primera columna superpuesta con la máscara de subred en la segunda columna) que abarca la dirección de IP de destino del paquete de IP entrante. Un índice 10 con al menos una estructura de índice 11 que representa las direcciones de red de destino (formadas por la dirección de destino de la primera columna superpuesta con la máscara de subred en la segunda columna de la tabla de enrutamiento 33) y el procesamiento de solicitudes descrito en detalle anteriormente se utilizan para realizar esta determinación de la fila más específica correspondiente a la dirección de IP de destino en una solicitud entrante. Por ejemplo, un paquete de IP con una dirección de destino 192.168.1.23 se reconoce como que se dirige a la red 192.168.1.0/24 (24 = máscara de subred 225.225.225.0), es decir, la cuarta fila es la fila más específica de la tabla de enrutamiento 33 correspondiente con esta solicitud 9. Por otro lado, para un paquete de IP con un número de destino 123.123.123.123, la primera fila de la tabla de enrutamiento 33 que especifica la ruta estándar se determinará que es la fila más específica de la tabla de enrutamiento 33 correspondiente con esta solicitud 9. Por lo tanto, este paquete de IP se enrutará al siguiente salto 192.168.1.1 a través de la interfaz de red de salida 192.168.1.2.
El índice 10 y los mecanismos de procesamiento de solicitudes basados en el índice 10 presentados en la presente memoria también son aplicables a otras bases de datos o sistemas similares a bases de datos, tales como cortafuegos con tablas de filtro (por ejemplo, filtros de paquetes con o sin inspección de estado, filtro de intermediario, filtro de contenido), producción motores, motores de reglas (por ejemplo, repositorios de reparación que especifican procedimientos de reparación para cualquier tipo de síntomas de error de dispositivos técnicos), motores de difusión en forma continua, motores de verificación de transacciones, etc.
Por lo tanto, el sistema informático 100 es, por ejemplo, un nodo de red que alberga un cortafuegos, en cuyo caso la tabla de base de datos 2 es una tabla de filtrado, la solicitud 9 es un paquete de datos entrante y cada fila de la tabla de filtrado constituye una regla de filtrado para permitir o impedir que el paquete de datos entrante sea reenviado hacia un destino. Los valores del paquete de datos entrante (por ejemplo, un paquete de IP que lleva un segmento de TCP o UPD que lleva un paquete de capa de aplicación, tal como una solicitud de HTTP), tal como la dirección de IP de origen y destino, las direcciones de puerto de origen y destino, y las características del paquete de datos, tal como si el paquete de datos pertenece o no a una conexión existente, se comprueban frente a las reglas de filtrado definidas por las filas de la tabla de filtrado. La tabla de filtrado incluye, por ejemplo, al menos una columna de destino con posibles direcciones de destino (tales como direcciones de IP y/o direcciones de puerto), por ejemplo, una o más columnas de origen con posibles direcciones de origen (tales como direcciones de IP y/o direcciones de puerto), por ejemplo, una o más columnas con valores que especifican las características del paquete de datos entrante (tales como "establecido" que se refiere a los paquetes que pertenecen a una conexión establecida) y una columna con valores booleanos que indican si el paquete de datos entrante se ha de reenviar o se ha de descartar. La regla de filtrado (es decir, la fila) más aplicable (es decir, la más específica) se determina sobre la base de los valores de entrada 6 en el paquete de datos y se devuelve el valor correspondiente de la última columna mencionada (es decir, sí o no = aceptar o denegar).
En caso de que el sistema informático 100 sea, por ejemplo, un motor de reglas, la tabla de base de datos 2 es una tabla de reglas y cada fila de la tabla de reglas constituye una regla para responder a la solicitud. Las columnas de la tabla de reglas definen los criterios de las reglas. Los valores de entrada 6 de la solicitud que definen criterios de reglas particulares se comprueban frente a la tabla de reglas, se determina la regla más específica que cumple con los valores de entrada 6 y se devuelven los valores de retorno solicitados de la fila más específica determinada de la tabla de reglas.
Finalmente, la FIG. 13 es una representación esquemática de un sistema informático 100 que proporciona la funcionalidad de la base de datos 1 con al menos una tabla de base de datos 2. La base de datos 1 puede incluir un conjunto de instrucciones para causar en el sistema informático cualquiera de los métodos y actividades realizadas por en la tabla de base de datos 1 como se explicó anteriormente. El sistema informático 100 incluye un procesador 101, una memoria principal 102 y un dispositivo de interfaz de red 103 que se comunican entre sí a través de un bus 104. El procesador 101 incluye al menos una memoria caché de CPU que contiene al menos una parte del índice 10, como se muestra en la FIG. 11 y en la FIG. 13. La memoria principal 102 incluye la base de datos 1 (es decir, el software ejecutado que implementa el sistema de base de datos así como al menos una tabla de base de datos 2) y, opcionalmente, partes de la tabla de base de datos 2 también se mantienen dentro de la memoria caché de CPU del procesador 101. Opcionalmente, el sistema informático 100 puede incluir además una memoria estática 105 y una unidad de disco duro 106. Una pantalla de vídeo 107, un dispositivo de entrada alfanumérica 108 y un dispositivo de control del cursor 109 constituyen una interfaz hombre-máquina con el fin de operar el sistema informático 100. El dispositivo de interfaz de red 103 es una interfaz cableada y/o inalámbrica que conecta la base de datos 1 a cualquier número y tipo de dispositivos cliente y aplicaciones que emiten solicitudes 9 a la base de datos 1. Los clientes pueden residir en Internet y/o cualquier otra red. El dispositivo de interfaz de red 103 utiliza o bien protocolos de comunicación estándar tales como la pila de protocolos de HTTP/TCP/IP, IEEE 802.11 y/o protocolos de comunicación propietarios. Un conjunto de instrucciones (es decir, software) 110 que incorpora cualquiera de las metodologías descritas anteriormente, o todas ellas, reside completamente, o al menos parcialmente, en o sobre un medio legible por máquina, por ejemplo, la memoria principal 102 y/o el procesador 101 con al menos una memoria caché de CPU. Entre otras, las instrucciones pueden implementar las funciones de la base de datos 1 para procesar solicitudes 9 entrantes, para determinar la fila 3 más específica de la tabla de base de datos 2 correspondiente a una solicitud 9, como se muestra en la FIG. 6, así como la generación de índices de la FIG. 9. Un medio legible por máquina en el que reside el software 110 también puede ser un soporte de datos no volátil 111 (por ejemplo, un disco duro magnético no extraíble o un disco óptico o magnético extraíble) que es parte de la unidad de disco 106. El software 110 además se puede transmitir o recibir como una señal propagada 112 a través de Internet a través del dispositivo de interfaz de red 103.

Claims (14)

REIVINDICACIONES
1. Un método de determinación de una fila (3) más específica dentro de una tabla de base de datos (2) mantenida por un sistema informático (100),
la tabla de base de datos (2) que comprende una pluralidad de filas (3) y una pluralidad de columnas (4), las filas (3) y columnas (4) de la tabla de base de datos (2) que forman celdas (5), en donde cada celda (5) incluye al menos un valor o ningún valor;
el sistema informático (100) que mantiene también un índice (10) para la tabla de base de datos (2);
el índice (10) que incluye una estructura de índice (11) respectiva para cada columna (4) de la tabla de base de datos (2);
cada estructura de índice (11) que incluye una matriz respectiva (12) de tuplas de puntero (14) para cada valor que aparece en la columna (4) respectiva y un mapa de bits (13), en donde cada tupla de puntero (14) incluye un primer puntero (15) que indica uno de los valores que aparecen en la columna (4) y un segundo puntero (16) que indica la fila (3) de la tabla de base de datos (2) en la que aparece el valor, y en donde el mapa de bits (13) indica celdas (5) dentro de la columna (4) respectiva sin valor;
el índice (10) que indica un orden de especificidad de las filas (3) de la tabla de base de datos (2);
el método que comprende:
- recibir, por el sistema informático (100), una solicitud (9) que indica al menos una columna (4) de la tabla de base de datos (2) asociada con un valor de entrada respectivo (6);
- en respuesta a recibir la solicitud (9), inicializar un mapa de bits de resultado (25) que indica todas las filas como filas (3) restantes de la tabla de base de datos (2) que son filas candidatas que potencialmente cumplen la solicitud (9);
- incrementalmente, para cada columna (4) indicada en la solicitud (9),:
- utilizar, por el sistema informático (100), el mapa de bits (13) de la estructura de índice (11) para la columna (4) para mantener todas las filas (3) de las filas restantes que no contienen valores en la celda (5) de la columna (4) considerada, y
- utilizar, por el sistema informático (100), las tuplas de puntero (14) de la estructura de índice (11) para la columna (4) para filtrar todas las filas (3) de las filas restantes que no incluyen el valor de entrada respectivo (6), en donde dicho uso del mapa de bits (13) y uso de las tuplas de puntero (14) de la estructura de índice (11) comprende:
- establecer un mapa de bits de columna (23) inicializando el mapa de bits de columna (23) con el mapa de bits (13) de la columna (4) considerada;
- buscar a través de las tuplas de puntero (14) todas las filas que incluyen el valor de entrada (6) respectivo e indicar, en el mapa de bits de columna (23), todas las filas (3) que cumplen el valor de entrada (6) respectivo para la columna (4) considerada; y
- actualizar el mapa de bits de resultado (25) combinando el mapa de bits de resultado (25) con el mapa de bits de columna (23);
- seleccionar, por el sistema informático (100), de las filas (3) restantes, la fila (3) que es la más alta en el orden de especificidad;
- devolver, por el sistema informático (100), el valor de al menos una celda (5) de la fila (3) determinada.
2. El método según la reivindicación 1, en donde la respectiva matriz (12) de tuplas de punteros (14) se almacena contigua en una memoria (28) del sistema informático (100).
3. El método según cualquiera de las reivindicaciones 1 a 2, en donde dicho uso de las tuplas de puntero (14) y el mapa de bits (13) de la estructura de índice (11) para cada columna (4) indicada en la solicitud (9) comprende además realizar una búsqueda binaria en la respectiva matriz (12) de tuplas de punteros (14).
4. El método según cualquiera de las reivindicaciones 1 a 3, que comprende además:
- generar el índice (10):
- inicializando los mapas de bits (13) que indican las celdas (5) dentro de la respectiva columna (4) sin un valor,
- añadiendo una tupia de puntero (14) a la matriz (12) de tupias de puntero (14) de la estructura de índice (11) respectiva para cada valor en la columna (4),
- actualizando el mapa de bits (13) de la respectiva estructura de índice (11) para reflejar todas las celdas (5) sin un valor.
5. El método según la reivindicación 4, en el que generar el índice (10) comprende además:
ordenar las tuplas de puntero (14) de cada estructura de índice (11) por el valor apuntado por el primer puntero (15).
6. El método según cualquiera de las reivindicaciones 1 a 5, en donde la indicación del orden de especificidad de las filas (3) de la tabla de base de datos (2) se realiza clasificando las filas (3) de la tabla de base de datos (2) dependiendo de un número de celdas (5) en cada fila (3) sin valores y/o una especificidad de los valores en las celdas (5) de la fila (3).
7. El método según la reivindicación 6, en donde la indicación del orden de especificidad se da por un único orden de fila (3) que indica las filas clasificadas (3).
8. El método según cualquiera de las reivindicaciones 1 a 5, en donde la indicación de especificidad se da por valores de ponderación (7) incluidos en el índice (10) de la tabla de base de datos (2).
9. El método de cualquiera de las reivindicaciones 1 a 8, en donde el sistema informático (100) es un enrutador, la tabla de base de datos (2) es una tabla de enrutamiento (33), cada fila (3) de la tabla de enrutamiento (33) constituye una regla de enrutamiento para enrutar una solicitud (9) entrante hacia un destino, la tabla de enrutamiento (33) que comprende una columna (4) de destino con posibles valores de destino y una columna (4) de ruta con valores correspondientes que indican una ruta hacia el destino.
10. El método de cualquiera de las reivindicaciones 1 a 8, en donde el sistema informático (100) es un cortafuegos, la tabla de base de datos (2) es una tabla de filtrado, la solicitud (9) es un paquete de datos entrante y cada fila (3) de la tabla de filtrado constituye una regla de filtrado para permitir o impedir que el paquete de datos entrante sea reenviado hacia un destino, en donde la tabla de filtrado comprende al menos una columna (4) de destino con posibles direcciones de destino, al menos una columna (4) con valores que especifican características del paquete de datos entrante y una columna (4) con valores booleanos que indican si el paquete de datos entrante se ha de reenviar o se ha de descartar.
11. El método de una cualquiera de las reivindicaciones 1 a 10, en donde el índice (10) se almacena en una memoria caché del procesador (32) del sistema informático (100) y permanece para ser almacenado en la memoria caché del procesador (32) después de que el valor de al menos una celda (5) de la fila (3) determinada haya vuelto a estar disponible para procesar solicitudes (9) adicionales.
12. Un sistema informático (100) para determinar una fila (3) más específica dentro de una tabla de base de datos (2) mantenida por el sistema informático (100),la tabla de base de datos (2) que comprende una pluralidad de filas (3) y una pluralidad de columnas (4), las filas (3) y las columnas (4) de la tabla de base de datos (2) que forman celdas (5), en donde cada celda (5) incluye o bien al menos un valor o bien ningún valor;
el sistema informático (100) que mantiene también un índice (10) para la tabla de base de datos (2);
el índice (10) que incluye una estructura de índice (11) respectiva para cada columna (4) de la tabla de base de datos (2);
cada estructura de índice (11) incluye una matriz respectiva de tuplas de puntero (14) para cada valor que aparece en la columna (4) respectiva y un mapa de bits (13), en donde cada tupla de puntero (14) incluye un primer puntero (15) que indica uno de los valores que aparecen en la columna (4) y un segundo puntero (16) que indica la fila (3) de la tabla de base de datos (2) en la que aparece el valor, y en donde el mapa de bits (13) indica las celdas (5) dentro la respectiva columna (4) sin un valor;
el índice (10) que indica un orden de especificidad de las filas (3) de la tabla de base de datos (2);
el sistema informático (100) que está configurado para:
- recibir una solicitud (9) que indique al menos una columna (4) de la tabla de base de datos (2) asociada con un valor de entrada (6) respectivo;
- en respuesta a recibir la solicitud (9), inicializar un mapa de bits de resultado (25) indicando todas las filas como filas (3) restantes de la tabla de base de datos (2) que son filas candidatas que potencialmente cumplen la solicitud (9);
- incrementalmente, para cada columna (4) indicada en la solicitud (9):
- usar el mapa de bits (13) de la estructura de índice (11) para la columna (4) para mantener todas las filas (3) de las filas restantes que no contienen valores en la celda (5) de la columna (4) considerada; - usar las tuplas de puntero (14) de la estructura de índice (11) para la columna (4) para filtrar todas las filas (3) de las filas restantes que no incluyen el valor de entrada (6) respectivo, y
- usar el mapa de bits (13) de la estructura de índice (11) para la columna (4) para mantener todas las filas (3) de la tabla de base de datos (2) que no contengan valores en la celda (5) de la columna (4) considerada,
en donde, para utilizar el mapa de bits (13) y utilizar las tuplas de puntero (14) de la estructura de índice (11), el sistema informático (100) está configurado para:
- establecer un mapa de bits de columna (23) inicializando el mapa de bits de columna (23) con el mapa de bits (13) de la columna (4) considerada;
- buscar a través de las tuplas de puntero (14) para todas las filas, incluyendo el valor de entrada (6) respectivo e indicando, en el mapa de bits de la columna (23), todas las filas (3) que cumplen con el valor de entrada (6) respectivo para la columna (4) considerada; y
- actualizar el mapa de bits de resultado (25) combinando el mapa de bits de resultado (25) con el mapa de bits de columna (23);
- seleccionar de las filas (3) restantes, la fila (3) que es la más alta en el orden de especificidad;
- devolver el valor de al menos una celda (5) de la fila (3) determinada.
13. El sistema informático (100) según la reivindicación 12 que está dispuesto para realizar el método de cualquiera de las reivindicaciones 2 a 11.
14. Un programa informático que comprende instrucciones que, cuando el programa se ejecuta por un ordenador, hacen que el ordenador lleve a cabo el método según cualquiera de las reivindicaciones 1 a 11.
ES17000126T 2016-02-05 2017-01-25 Indice de tabla de base de datos Active ES2930440T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/017,102 US10095720B2 (en) 2016-02-05 2016-02-05 Database table index
FR1650922A FR3047580B1 (fr) 2016-02-05 2016-02-05 Index de table de base de donnees

Publications (1)

Publication Number Publication Date
ES2930440T3 true ES2930440T3 (es) 2022-12-13

Family

ID=57868019

Family Applications (1)

Application Number Title Priority Date Filing Date
ES17000126T Active ES2930440T3 (es) 2016-02-05 2017-01-25 Indice de tabla de base de datos

Country Status (3)

Country Link
EP (1) EP3203388B1 (es)
CN (1) CN107045535B (es)
ES (1) ES2930440T3 (es)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10817504B2 (en) * 2018-03-29 2020-10-27 Sap Se Constraint satisfaction software tool for database tables
US11386089B2 (en) 2020-01-13 2022-07-12 The Toronto-Dominion Bank Scan optimization of column oriented storage

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5951651A (en) * 1997-07-23 1999-09-14 Lucent Technologies Inc. Packet filter system using BITMAP vector of filter rules for routing packet through network
US7386525B2 (en) * 2001-09-21 2008-06-10 Stonesoft Corporation Data packet filtering
US7254574B2 (en) * 2004-03-08 2007-08-07 Microsoft Corporation Structured indexes on results of function applications over data
US20050246301A1 (en) * 2004-03-18 2005-11-03 Peter Lin System and Method to distribute reasoning and pattern matching in forward and backward chaining rule engines
CN101127034B (zh) * 2006-08-18 2012-05-23 国际商业机器公司 数据组织、查询、呈现、存档、恢复、删除、提炼方法及装置和系统
US8977601B2 (en) * 2010-11-11 2015-03-10 International Business Machines Corporation Disappearing index for more efficient processing of a database query
US8566333B2 (en) * 2011-01-12 2013-10-22 International Business Machines Corporation Multiple sparse index intelligent table organization
US8751542B2 (en) * 2011-06-24 2014-06-10 International Business Machines Corporation Dynamically scalable modes
EP2568421A1 (en) * 2011-09-07 2013-03-13 Amadeus Method and system for accessing places

Also Published As

Publication number Publication date
EP3203388A1 (en) 2017-08-09
EP3203388B1 (en) 2022-08-03
CN107045535B (zh) 2021-09-17
CN107045535A (zh) 2017-08-15

Similar Documents

Publication Publication Date Title
US10095720B2 (en) Database table index
US11811660B2 (en) Flow classification apparatus, methods, and systems
Kumar et al. Advanced algorithms for fast and scalable deep packet inspection
US9269411B2 (en) Organizing data in a hybrid memory for search operations
EP1623347B1 (en) Comparison tree data structures and lookup operations
US8233493B2 (en) Packet router having improved packet classification
JP6356675B2 (ja) 集約/グループ化動作:ハッシュテーブル法のハードウェア実装
US6263364B1 (en) Web crawler system using plurality of parallel priority level queues having distinct associated download priority levels for prioritizing document downloading and maintaining document freshness
JP5529976B2 (ja) 高速ipルックアップのためのシストリック・アレイ・アーキテクチャ
CN104135437B (zh) 用于在网络交换机中利用集中式存储器池的表搜索的装置和方法
US10572442B2 (en) Systems and methods for providing distributed tree traversal using hardware-based processing
US6963868B2 (en) Multi-bit Patricia trees
Qiao et al. Fast Bloom filters and their generalization
US20060155915A1 (en) Database query processor
US7966349B2 (en) Moving records between partitions
US9595003B1 (en) Compiler with mask nodes
CN112000846B (zh) 基于gpu分组lsm树索引的方法
EP3276501B1 (en) Traffic classification method and device, and storage medium
US9009401B2 (en) Multi-updatable least recently used mechanism
Pak et al. High performance and high scalable packet classification algorithm for network security systems
US20170154078A1 (en) Systems and methods for searching multiple related tables
ES2930440T3 (es) Indice de tabla de base de datos
Bercea et al. Fully-dynamic space-efficient dictionaries and filters with constant number of memory accesses
Cheng et al. Scalable multi-match packet classification using TCAM and SRAM
US20170012874A1 (en) Software router and methods for looking up routing table and for updating routing entry of the software router