ES2329339T3 - Base de datos. - Google Patents

Base de datos. Download PDF

Info

Publication number
ES2329339T3
ES2329339T3 ES01998908T ES01998908T ES2329339T3 ES 2329339 T3 ES2329339 T3 ES 2329339T3 ES 01998908 T ES01998908 T ES 01998908T ES 01998908 T ES01998908 T ES 01998908T ES 2329339 T3 ES2329339 T3 ES 2329339T3
Authority
ES
Spain
Prior art keywords
decision
key
index
node
data
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.)
Expired - Lifetime
Application number
ES01998908T
Other languages
English (en)
Inventor
Duncan Gunther Pauly
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.)
Coppereye Ltd
Original Assignee
Coppereye Ltd
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
Application filed by Coppereye Ltd filed Critical Coppereye Ltd
Application granted granted Critical
Publication of ES2329339T3 publication Critical patent/ES2329339T3/es
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2255Hash tables
    • 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/2246Trees, e.g. B+trees
    • 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)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Navigation (AREA)

Abstract

Método para organizar una base de datos que en uso comprende un índice (2) y datos (16), en el que el índice (2) se consulta usando una clave de búsqueda que comprende al menos un símbolo, estando representado el símbolo por una pluralidad de bits, con el fin de localizar datos que coinciden con un criterio de búsqueda, en el que el índice es una estructura jerárquica de nodos por la que se navega durante una búsqueda hasta llegar a un conjunto (6-14) de conclusión, se realiza una búsqueda en el índice comparando un grupo de decisión de la clave de búsqueda en cada nodo con un valor de decisión del nodo, comprendiendo cada grupo de decisión al menos un bit y comprendiendo al menos algunos de los grupos de decisión una pluralidad de bits, y la estructura está organizada de modo que no se almacenan símbolos de clave en un nodo en la estructura, caracterizado porque cada nodo tiene menos de tres trayectos de salida desde el mismo, y porque el número de bits en el grupo de decisión puede establecerse para que incluya cualquier número de bits entre un único bit y todos los bits de la clave.

Description

Base de datos.
La presente invención se refiere a un método para indexar, colocar información en, y consultar una base de datos. En particular la invención permite la búsqueda eficaz de datos escalares dentro de un sistema de almacenamiento de datos.
Los tipos de datos escalares incluyen, por ejemplo, datos lógicos, secuencias de texto, datos numéricos, y datos de fecha y hora.
Aunque los procesadores de datos son rápidos, es ineficaz y requiere mucho tiempo buscar en todos los datos contenidos en un sistema de almacenamiento para encontrar un ítem particular que tiene una propiedad especificada o un rango de propiedades. También, es casi inevitable que los datos se almacenen en medios de almacenamiento masivo, y esto da lugar a retardos debidos al acceso a disco en comparación con la velocidad de CPU y el acceso a memoria de semiconductor. Es más eficaz crear un índice de modo que puedan recuperarse ítems usando una clave de búsqueda.
Los mecanismos de índice requieren la creación y el mantenimiento de una estructura de índice interna. La navegación por y el mantenimiento de esta estructura acarrean una sobrecarga de procesamiento por sí solos. La sobrecarga puede variar en función del mecanismo de indexación usado. También puede variar a medida que cambia el tamaño de la base de datos o, por ejemplo, a medida que los datos en la base de datos cambian de vez en cuando.
Un ejemplo sencillo es el de una base de datos que almacena información cronológica, tal como fechas de nacimiento. El diseñador puede, por ejemplo, estructurar los datos de modo que las personas nacidas antes de 2000 d.C. tengan datos relativos a ellas segregados de las nacidas después de 2000 d.C. Esta estrategia puede funcionar durante un tiempo, pero puede verse que el número de personas nacidas antes de 2000 d.C. es un conjunto limitado, mientras que el número de nacidos después de esta fecha es ilimitado. Por tanto, a medida que pasa el tiempo, esta clave de indexación puede volverse redundante a medida que aumenta la proporción de entradas relativas a personas nacidas después de 2000 d.C.
La eficacia del método de indexación puede evaluarse frente a varios atributos, tales como:
1) El tamaño del índice. Índices mayores requieren más tiempo de navegación. También pueden requerir un aumento del número de permutaciones de datos u operaciones de lectura que implican la transferencia desde medios de almacenamiento masivo, tales como unidades de disco duro, y memoria más rápida, tal como memoria de semiconduc-
tores.
2) Los límites estructurales del índice. Una estructura altamente limitada puede ofrecer ventajas iniciales, pero experimenta un aumento de la sobrecarga computacional si se requiere reconstruir el índice a medida que crece la base de datos para alojar más datos.
3) Las restricciones de datos de clave impuestas por el índice. Por tanto, el tamaño máximo de las claves o los tipos de datos de las claves o rangos representados por las claves puede comenzar a afectar al rendimiento del índice a medida que crece o a medida que la base de datos se llena de datos.
4) Las restricciones de recuperación de clave impuestas por el índice. Algunos índices sólo permiten coincidencia de clave exacta, mientras que otros permiten coincidencia de rango.
5) Limitaciones de crecimiento con respecto al índice. Puede limitarse el tamaño máximo del índice.
6) Limitaciones de concurrencia. El índice puede o bien permitir o bien inhibir la inserción y recuperación simultánea de datos de clave.
\vskip1.000000\baselineskip
Los sistemas conocidos de la técnica anterior usan normalmente tres gráficos con nodos que contienen uno o más ítems de datos de clave. Con el fin de interrogar la base de datos, se navega por los árboles comparando valores de clave en cada nodo visitado con una clave de búsqueda requerida. Es inherente en un diseño de este tipo que cada nodo incluye la totalidad de una clave asociada con la creación del nodo y por tanto el "tamaño" del nodo en términos de almacenamiento de datos puede ser bastante grande.
La eficacia de tales índices puede depender del tamaño de clave y del orden en el que se añaden datos al índice.
Además, algunos métodos requieren que los árboles estén "equilibrados" en todo momento si deben funcionar de manera apropiada. Estos métodos pueden acarrear sobrecargas de mantenimiento significativas para la inserción y el borrado de claves lo que los vuelve inadecuados para sistemas de alto rendimiento global.
El documento WO9206440 describe una estructura de índice en la que cada registro de índice incluye un valor de clave. En una realización alternativa, los valores de clave en cada nodo de hoja.
El documento WO9938094 describe un esquema de indexación de árbol en el que la búsqueda se basa en dividir la búsqueda según la parte de clave de búsqueda. Por tanto, por ejemplo, cada nodo en el archivo de indexación de árbol representa un desplazamiento de la clave de búsqueda y el enlace a cualquiera de sus hijos representa el valor del carácter en dicho desplazamiento.
El boletín de divulgación técnica de IBM 07-706, página 607, da a conocer un Acceso Ordinal al elemento de Estructuras de Datos en Árboles Binarios; 3 de marzo de 2005.
Navegación
Según un primer aspecto de la presente invención, se proporciona un método para organizar una base de datos que en uso comprende un índice y datos, en el que el índice se consulta usando una clave de búsqueda que comprende al menos un símbolo, estando representado el símbolo por una pluralidad de bits, con el fin de localizar datos que coinciden con un criterio de búsqueda, y en el que el índice es una estructura jerárquica de nodos por la que se navega durante una búsqueda hasta llegar a un conjunto de conclusión, en el que se realiza una búsqueda en el índice comparando un grupo de decisión de la clave de búsqueda en cada nodo con un valor de decisión del nodo, comprendiendo cada grupo de decisión al menos un bit y comprendiendo al menos algunos de los grupos de decisión una pluralidad de bits, la estructura está organizada de modo que no se almacenan símbolos de clave en un nodo en la estructura, teniendo cada nodo menos de tres trayectos de salida desde el mismo y pudiendo establecerse el número de bits en el grupo de decisión para que incluya cualquier número de bits entre un único bit y todos los bits de la clave.
Por tanto es posible proporcionar una estructura de índice eficaz que permite la búsqueda y actualización eficaz de la base de datos. La estructura de índice es mucho más pequeña que los índices de la técnica anterior porque los nodos no almacenan toda la clave asociada con el nodo. De hecho no es necesario que un nodo almacene ninguna clave asociada con el mismo. Además, los nodos no almacenan las reglas de decisión relativas a la interrogación de un nodo. Esto se debe a que las reglas son globales porque son compartidas por todos los nodos en lugar de ser específicas de un nodo.
Cada nodo de decisión toma una decisión binaria. Esto es, cada nodo sólo tiene un máximo de dos trayectos de salida.
Preferiblemente la decisión aplicada en cada nodo es una consulta simple. Esto significa que la consulta compara la clave o parte de la clave con el criterio de decisión en un nodo, y que en términos binarios la prueba es normalmente (aunque no necesariamente de manera exclusiva) la clave, o parte de la misma que está probándose, mayor o menor que el criterio de decisión. Esto elimina la necesidad de almacenar características de la clave de búsqueda dentro de la estructura del propio índice.
Cada salida desde un nodo puede apuntar a un nodo de decisión adicional, un conjunto de conclusión o a un resultado nulo.
Si una salida desde un nodo apunta a otro nodo, entonces la búsqueda continúa. Sin embargo, si la salida desde un nodo apunta a un conjunto de conclusión, entonces generalmente concluye la navegación por el índice.
Es posible que ningún resultado coincida con los términos de búsqueda, en cuyo caso la búsqueda finaliza en un resultado nulo.
Cada "registro" en la base de datos pertenece a un conjunto de conclusión. El propio conjunto de conclusión apunta a los datos que cumplen los criterios de búsqueda específicos, o en algunas circunstancias puede almacenar los propios datos.
La estructura jerárquica de los nodos de decisión puede considerarse como un gráfico de decisión. El gráfico de decisión puede tener cualquier estructura interna y tamaño arbitrario. Sin embargo, el gráfico de decisión es generalmente una entidad pequeña en cuanto a su tamaño en una memoria de un procesador.
Preferiblemente el gráfico de decisión está contenido, en uso, dentro de una memoria electrónica de un procesador de datos. Al contener un gráfico de decisión relativamente pequeño en RAM, el procesador de datos puede encontrar rápidamente el resultado de la consulta. En particular, puesto que el análisis del gráfico de decisión no requiere acceso a medios magnéticos u otros medios de almacenamiento físico, los tiempos de acceso asociados con tales medios se eliminan, mejorando de este modo el rendimiento.
Preferiblemente sólo puede llegarse a cada conjunto de conclusión por una única ruta a través del gráfico de decisión. Esto garantiza que todas las claves en un conjunto de conclusión se ajustan a un único conjunto de decisiones compartido.
Los índices de base de datos pueden, y de hecho deben, desarrollarse a lo largo del tiempo, y esto puede llevar a una degradación en el rendimiento a medida que crece la base de datos. Por tanto es necesario permitir insertar y borrar datos dentro de conjuntos de conclusión, y también crear nuevos conjuntos de conclusión.
Preferiblemente cada conjunto de conclusión tiene un tamaño máximo. El tamaño máximo es un parámetro controlado por el usuario o el diseñador. Sin embargo, de manera ventajosa el tamaño puede estar relacionado con el tamaño de bloques de datos o de dirección usados por un dispositivo de almacenamiento, tal como un almacenamiento magnético que puede comprender uno o más discos duros. Sin embargo, puede usarse cualquier almacenamiento de datos de acceso aleatorio, tal como dispositivos de almacenamiento óptico.
A medida que un conjunto de conclusión se aproxima a o llega a un tamaño predeterminado, se inserta un nuevo nodo de decisión en el árbol de decisión y los datos que estaban en el conjunto de conclusión se reindexan en nuevos conjuntos de conclusión a los que se llega a través de los trayectos de salida del nuevo nodo de decisión. El nuevo nodo de decisión se inserta en el trayecto de salida de un nodo que apuntaba al conjunto de conclusión que superó su tamaño máximo.
Por tanto los conjuntos de conclusión se construyen para tener un buen comportamiento.
El gráfico de decisión no contiene en sí mismo ningún dato de clave de búsqueda. Todos los datos de clave se suponen o deducen de la estructura del gráfico de decisión. Esto mantiene el gráfico de decisión compacto. Asimismo, esto significa que el tamaño del gráfico de decisión es independiente del tamaño de clave.
Una ventaja adicional de la presente invención es que pueden realizarse cambios en la estructura del gráfico de decisión, y que estos cambios son locales. Esto es, sólo uno o unos pocos nodos de decisión se ven afectados por el cambio. Esto significa que la reorganización estructural no es una sobrecarga computacional significativa.
Preferiblemente los nodos de decisión están relacionados con partes, y más preferiblemente partes relativamente pequeñas de la clave. Esto tiene la consecuencia de que el gráfico de decisión es en gran parte independiente de la estructura de la clave. Esto tiene también la ventaja de que el gráfico de decisión plantea pocas, o ninguna, restricción en la estructura de la clave. Además, la parte de la clave con la que está relacionado un nodo no debe seguir un orden estructurado a medida que se navega por el gráfico de decisión. Por tanto, la parte de la clave en cuestión no debe progresar a lo largo de la clave de una manera monótona a medida que se navega por el gráfico.
De manera ventajosa el gráfico de decisión está estructurado de modo que se conserva el orden semántico de secuencias de clave. Por tanto, por ejemplo, el gráfico de decisión puede estar estructurado de modo que un primer nodo o conjunto de nodos prueba un primer bit o un primer grupo de bits en una clave de búsqueda y que, a medida que se navega por el gráfico de decisión hacia un conjunto de conclusión, los bits de la clave que se prueban en nodos posteriores se vuelven cada vez menos significativos. Por tanto puede navegarse por el gráfico de decisión para localizar claves o bien mediante coincidencia exacta o mediante coincidencia de rango. El rango puede estar limitado parcial o completamente durante la búsqueda.
La estructura del gráfico de decisión, y en particular el hecho de que los cambios en la estructura sean locales, en el sentido que sólo afectan a un nodo o dos, en lugar de ser globales significa que la tarea computacional de mantenimiento del gráfico de decisión es generalmente baja. La naturaleza localizada de la reorganización facilita la inserción, el borrado y la recuperación de datos usando el índice. De hecho, pueden producirse dos o más de estos eventos de manera concurrente.
Preferiblemente no hay ninguna limitación funcional con respecto al tamaño del gráfico de decisión. La estructura del índice da lugar a un aumento del buen comportamiento del tiempo de búsqueda a medida que crece el gráfico de decisión para alojar mayores cantidades de datos.
Según un segundo aspecto de la presente invención, se proporciona una base de datos que en uso comprende un índice y datos, en la que el índice se consulta usando una clave de búsqueda que comprende al menos un símbolo, estando representado el símbolo por una pluralidad de bits, con el fin de localizar datos que coinciden con un criterio de búsqueda, y en la que el índice es una estructura jerárquica de nodos por la que se navega durante una búsqueda hasta llegar a un conjunto de conclusión, caracterizada porque se realiza una búsqueda en el índice comparando un grupo de decisión de la clave de búsqueda en cada nodo con un valor de decisión del nodo, porque cada grupo de decisión comprende al menos un bit y al menos algunos de los grupos de decisión comprenden una pluralidad de bits, porque la estructura está organizada de modo que no se almacenan símbolos de clave en un nodo en la estructura, y porque cada nodo tiene menos de tres trayectos de salida desde el mismo.
Los cambios estructurales localizados en el índice facilitan eventos de inserción, borrado y recuperación concurrentes dentro del índice.
Preferiblemente cada ítem de datos dentro de la base de datos puede pertenecer sólo a un conjunto de conclusión.
División del gráfico de decisión
A pesar de la fuerte preferencia de que el gráfico de decisión deba residir globalmente dentro de la memoria de semiconductores puede que esto no sea siempre posible. Esto puede deberse a que el índice se vuelve demasiado grande, o puede deberse a que el procesador de datos anfitrión implementa un entorno de "máquina virtual" para la base de datos de modo que el anfitrión puede realizar múltiples tareas, y el sistema operativo no asigna recursos de memoria suficientes a la base de datos.
En tales circunstancias el gráfico de decisión puede estar contenido dentro de bloques de memoria en el dispositivo de almacenamiento masivo del sistema informático. El controlador de disco gestiona el disco en cuanto a bloques discretos de datos. Por tanto, por ejemplo, si el tamaño de bloque mínimo usado por el controlador de disco es 64 Kbytes, entonces un índice de 40 K y un índice de 60 K ocupan ambos el mismo espacio de almacenamiento en el disco, concretamente un bloque, y de manera similar un índice de 65 K y un índice de 130 K también ocupan el mismo espacio de almacenamiento, concretamente dos bloques.
Con el fin de alojar y trabajar con estas limitaciones de sistema, es necesario controlar la modificación del índice, ya que el tamaño del índice aumentará a medida que aumenta el número de claves dentro del índice. Por tanto, para hacer que el índice crezca se requieren más bloques de memoria.
En un primer esquema para hacer que el índice crezca cuando se requiere insertar un nuevo nodo de decisión y el bloque está lleno, se crea un nuevo bloque y el nuevo nodo se coloca en el nuevo bloque. El gráfico de decisión se modifica de modo que el nodo que apunta al nuevo nodo también hace que el nuevo bloque se extraiga del almacenamiento magnético si ese bloque no reside ya en la memoria de semiconductores. La navegación continúa entonces desde el nuevo nodo.
Este método es sencillo pero ineficaz ya que es probable que lleve a la creación de muchos, posiblemente cientos, de bloques de memoria casi vacíos a partir de cada bloque lleno padre. Puede que esto no se considere un problema en cuanto a espacio ocupado ya que las unidades de disco pueden contener cantidades extraordinarias de datos, pero puede comprometer el rendimiento del índice ya que se requieren más operaciones de E/S de disco para navegar por el índice.
Un enfoque preferido es crear un nuevo bloque y entonces dividir el bloque padre (es decir, el bloque completo) sustancialmente en partes iguales entre los dos bloques. Este enfoque requiere interrogar al bloque original para encontrar el nodo que mejor divide el bloque en dos. Esto podría realizarse a partir de un análisis ab initio de los nodos en el bloque o mediante enfoques de naturaleza más estadística. Así, por ejemplo, podría usarse un algoritmo recursivo que elige de manera selectiva un nodo de prueba para la división, calcula la división del índice que resulta de la elección del nodo y basándose en el resultado modifica la elección del nodo de prueba hasta llegar a una distribución aproximadamente uniforme.
Este segundo enfoque tiene el beneficio de que cada bloque de índice contiene un número sustancial de nodos. Esto lleva a un uso significativamente más eficaz de la memoria.
Calificador
Una consulta de índice puede llevar a muchas ocurrencias de clave. Cada resultado devuelto de la consulta puede dar como resultado una recuperación de los datos asociados desde un dispositivo de almacenamiento de datos masivo. Puesto que éste es normalmente un disco duro, entonces puede requerirse una operación de E/S de disco para cada resultado devuelto a partir de la consulta.
Puede que no se requieran todos los datos extraídos.
Considérese por ejemplo el caso de una organización multinacional que desea consultar su base de datos de personal con el fin de determinar el número de empleados con sede en Londres y dentro de un rango salarial específico. Un índice basado sólo en la ubicación o en el salario podría devolver muchos empleados para una consulta dada. Sólo se reduce el tamaño de la consulta si se utiliza una consulta con Y.
Se conoce modificar índices de base de datos para este tipo de consulta almacenando más de una clave en el índice. Por tanto la clave puede considerarse como una clave de composición o compuesta. La probabilidad de que un candidato (es decir, una entrada en la base de datos) coincida con dos claves se reduce mucho en comparación con la probabilidad de que un candidato coincida con una clave, entonces se reduce el número de ocurrencias devueltas por la consulta y se requieren menos operaciones de E/S de disco.
Se conoce realizar estas claves compuestas concatenando claves entre sí. Expresado de manera sencilla, el segundo criterio de búsqueda se añade al primero en el momento de la creación del índice. Sin embargo, las claves individuales pueden ser bastante largas y producir un índice de claves concatenadas puede dar como resultado que el índice se vuelva de hecho muy largo.
\newpage
El solicitante se ha dado cuenta de que no es necesario almacenar los datos de clave en su forma original, sino que pueden de hecho codificarse o representarse por una palabra o secuencia de bits de una longitud significativamente reducida. La primera clave en el índice, y cada clave posterior en una clave concatenada pueden representarse en una forma modificada de este tipo.
Según un aspecto adicional de la presente invención, se proporciona un método para organizar una base de datos, en el que la clave de índice es una clave compuesta que contiene al menos una clave, y en la que una o más claves se representan en una forma comprimida.
Preferiblemente se proporciona una pluralidad de claves en una forma comprimida.
Preferiblemente las claves se comprimen mapeándolas de una forma no comprimida a una forma comprimida. No es necesario que el mapeo sea único pero debe tener un buen comportamiento. Un mapeo adecuado puede realizarse mediante el uso de algoritmos de hashing.
Existe el riesgo, por el mero hecho de que pueden representarse diferentes claves mediante la misma representación reducida, de que una consulta devuelva tanto resultados que coinciden con la consulta, como algunos resultados que no coinciden con la consulta. Sin embargo, suponiendo que se usa una buena codificación Hash de aleatorización, la probabilidad de una no coincidencia en una clave es 1/255, pero para N calificadores la probabilidad de una no coincidencia es (1/255)^{N}.
Por tanto, la tasa de error es generalmente pequeña.
De manera ventajosa todas las ocurrencias devueltas se inspeccionan para validar los datos y eliminar cualquier resultado devuelto incorrectamente.
Cuando se realiza la inserción, el borrado o la recuperación, la nueva clave debe comprimirse usando el mismo proceso de traslación de clave que se usó para construir el índice.
Preferiblemente cada elemento adicional tras el primer elemento de una clave concatenada puede representarse como un "calificador". Cada calificador tiene preferiblemente una longitud de sólo 1 byte.
Por tanto, comparando la presente invención con la técnica anterior, una clave concatenada de la técnica anterior que comprende ocho elementos de clave, cada uno de ocho bytes, ocupa 64 bytes. En la presente invención la clave principal puede representarse en un formato no comprimido, ocupando de este modo 8 bytes, mientras que las siete claves adicionales pueden representarse respectivamente como un calificador de un byte. Por tanto la longitud de clave total es ahora sólo de 15 bytes.
Las claves de calificador son opcionales, y ninguna, cualquiera o todas las claves pueden proporcionarse durante una consulta de índice porque no afectan a la navegación por la estructura de índice. La prueba de las ocurrencias frente a las claves de calificador se realiza cuando se exploran los conjuntos de conclusión.
Por tanto se apreciará que este aspecto de la invención puede usarse con estructuras de base de datos convencionales, tales como un árbol-B, o con las estructuras dadas a conocer en otro punto de esta solicitud.
Adicionalmente los calificadores pueden usarse en conjunción con un índice en el que la información relativa a un nodo se deduce de la posición de un nodo en lugar de definirse explícitamente por o estar contenida dentro del propio nodo (tal como un índice que constituye una realización del primer aspecto de la presente invención).
Según un aspecto adicional de la presente invención, se proporciona una base de datos en la que el índice contiene al menos una clave, y en la que una o más claves están representadas en una forma comprimida.
Clave limitada
Tal como se observó anteriormente en el presente documento, la eficacia de los índices de las bases de datos puede depender en gran parte de las características de clave usadas con los mismos, llevando a sistemas de indexación potencialmente ineficaces en los que el valor de clave está aumentando o disminuyendo continuamente. Un ejemplo de una clave no limitada de este tipo es la clave de fecha y hora que aumenta constantemente con el paso del tiempo. A medida que se añaden estas claves al índice, hacen que se creen nuevas áreas del índice, y a medida que las viejas claves se borran del índice pueden provocar fragmentación cuando no pueden reutilizarse áreas obsoletas del índice para nuevos valores de clave. Sería muy ventajoso que la estructura de índice pudiera organizarse de modo que el uso de una clave no limitada no hiciera que el índice se volviera desequilibrado.
Según un décimo aspecto de la presente invención, se proporciona un método para navegar por una base de datos con un rango de claves entre una primera clave y una segunda clave que representan límites del rango, y en el que las claves se mapean con un rango reducido, y si el orden de las claves no se conserva durante el mapeo, se realiza una búsqueda del espacio mapeado que es mayor que la mayor de las claves y menor que la menor de las claves.
De manera ventajosa la clave se opera mediante una función hashing o de módulo de modo que las claves están distribuidas sustancialmente de manera uniforme por toda la base de datos. Por tanto, por ejemplo, una fecha/hora (K) no limitada (que puede ser, por ejemplo, el número de milisegundos desde el 1 de enero de 1970) se convierte en (K módulo N) donde N es el módulo elegido para el índice. Por tanto el valor de clave de convertidor siempre se situará en el rango de 0 a (N-1).
Preferiblemente el valor de módulo aplicado a las claves es mayor o igual al número máximo de valores de clave distintos que estarían contenidos dentro del índice. Sin embargo, debe señalarse que esta condición no es
obligatoria.
De manera ventajosa los conjuntos de conclusión (nodos al final del índice de árbol) contienen la clave en la forma no mapeada. Esto reduce la posibilidad de error ya que la clave de búsqueda puede compararse entonces con datos de clave en el conjunto de conclusión, ambos en su forma original, de modo que pueden evitarse errores de mapeo.
Esta invención puede aplicarse a índices convencionales de árbol-B u otros.
Según un undécimo aspecto de la presente invención, hay una base de datos que incluye un método para codificar claves no limitadas para su uso dentro de una base de datos, caracterizada porque cada clave se procesa por un operador que mapea la clave con un rango limitado.
Claves transitorias
Existe a veces la necesidad de manejar datos cuya validez o utilidad está limitada a un determinado rango temporal, u otro rango de valores. En bases de datos de la técnica anterior, tales datos "transitorios" se manejan en gran parte como datos normales, y en consecuencia habitualmente es necesario borrar explícitamente datos de clave transitorios obsoletos o eliminar secciones del índice en las que residen tales datos de clave obsoletos. Tales operaciones pueden ser de una gran intensidad en cuanto a procesamiento y pueden acarrear una sobrecarga de rendimiento significativa dentro de la base de datos o pueden imponer limitaciones de diseño.
Según un duodécimo aspecto de la presente invención, se proporciona un método que gestiona claves dentro de una base de datos, caracterizado porque las claves incluyen un campo de datos que indica una duración durante la cual la clave y sus datos asociados deberían mantenerse dentro de la base de datos.
Por tanto, algunos o todos los conjuntos de conclusión pueden modificarse para incluir datos que indican la duración durante la cual una clave y sus propiedades asociadas pueden considerarse válidas.
Preferiblemente, las claves que han expirado no se eliminan de manera activa de los conjuntos de conclusión, sino que se vuelven disponibles para su sobreescritura por nuevos datos una vez que han expirado. Por tanto, no es necesario borrar explícitamente claves transitorias y por tanto la sobrecarga de rendimiento no está presente en un proceso de borrado. En su lugar, una vez que el marcador indica que los datos ya no son válidos, el espacio que ocupa se vuelve disponible para su nuevo uso.
Aunque sería posible proporcionar un marcador de fecha y hora explícito para los datos en el que la información ya no se detectaría dentro del conjunto de conclusión, esta forma de codificar podría ocupar una cantidad de espacio inaceptablemente grande. En una realización preferida de la presente invención, la clave está asociada con una unidad de antigüedad, que proporciona una medida de su antigüedad actual, y un límite de antigüedad que indica la antigüedad a la que los datos y la clave ya no son válidos y se vuelven disponibles para su sobreescritura.
Preferiblemente la unidad de antigüedad es una variable, cuya longitud representa el número de segundos en una única unidad de antigüedad. El límite de antigüedad representa el número de unidades de antigüedad después de las que una clave puede eliminarse del índice.
De manera ventajosa cada conjunto de conclusión contiene una base de antigüedad que es un sello de fecha y hora de la entrada insertada/actualizada más reciente en ese conjunto. Cuando se accede al conjunto de conclusión, se calcula la antigüedad de cada entrada, y de manera ventajosa los resultados de los cálculos se almacenan en un campo de antigüedad de entrada. Puede realizarse una comparación entre la antigüedad de entrada y el límite de antigüedad para determinar cuando puede sobrescribirse la entrada.
Determinar la duplicidad de datos escalares
Tal como se observó anteriormente en el presente documento, se navega por los gráficos de decisión (árbol-B) de la técnica anterior hacia los bloques de hoja que contienen la información de valor de clave y puntero. Navegar por el índice de decisión puede requerir una o más operaciones de entrada/salida de disco para encontrar una clave elegida. Si se usa el índice para registrar la existencia de combinaciones de clave única, en las que son frecuentes combinaciones duplicadas, entonces la estructura de disco del índice puede ser inapropiada para un sistema de alto rendimiento.
Según un decimotercer aspecto de la presente invención, se proporciona un método para organizar una base de datos de modo que tenga un índice de decisión y un índice de clave, en el que las claves en el índice de clave se almacenan de una manera comprimida, y en el que puede realizarse una comprobación del índice de clave para ver si la clave existe antes de interrogar el índice de decisión que usa la clave.
Por tanto, es posible proporcionar un método de base de memoria eficaz para determinar la existencia de una clave con un índice, de modo que puede evitarse la necesidad de buscar en el propio índice directamente la clave.
Por tanto la invención complementa de manera eficaz una estructura de índice estándar conteniendo valores de clave codificados en una memoria de semiconductores. La existencia de una clave se comprueba en la memoria antes de buscar en el índice. Si se encuentra una entrada de coincidencia en la memoria, la clave se rechaza como duplicada, si no, se hace un intento de insertar la entrada en el índice.
Con el fin de proporcionar una estructura eficaz y compacta, el índice de clave usa una función de mapeo unidireccional, tal como una función hash. Las características de la función hash un otra función de mapeo son de modo que;
\bullet
siempre que se invoque la función de mapeo en el mismo valor de clave más de una vez, la función de mapeo debe devolver de manera consistente el mismo valor, siempre que no se haya modificado información dentro de la clave;
\bullet
si dos claves se consideran iguales, entonces llamar a la función de mapeo en cada una de las dos claves debe producir el mismo resultado;
\bullet
no se requiere mapear dos claves desiguales con valores disímiles, no obstante, proporcionar resultados distintos para claves desiguales mejorará la eficacia del índice.
Los algoritmos de código hash publicados, tales como CRC 32 y Adler 32 pueden usarse puesto que proporcionan una funcionalidad adecuada.
En una implementación del índice de clave, la memoria puede disponerse como una disposición homogénea de elementos de cuatro bytes. Esta disposición se conoce como la disposición de identidad. Preferiblemente el número de elementos en la disposición de identidad es 1,1 veces o más el número de elementos de clave única contenidos dentro de la estructura de índice. Sin embargo, por consiguiente es meramente suficiente que la disposición de identidad sea al menos tan grande como el índice. Dos funciones hash, A y B, se usan en conjunción con la disposición. Las funciones se seleccionan de modo que;
\bullet
para dos claves desiguales cualesquiera, K y L, donde A(K) = A(L), es poco probable que B(K) = B(L).
\bullet
Para dos claves desiguales cualesquiera K y L, donde B(K) = B(L), es poco probable que A(K) = A(L).
La función hash A se usa para calcular el elemento de desplazamiento (0..N) en la disposición de identidad para la clave K usando la siguiente ecuación:
Número de elemento = ABS(A(K))módulo N
donde ABS(..) devuelve la magnitud sin signo de un número y N es el número de elementos en la disposición de identidad.
Esta función se conoce como la función de elemento E(K).
Cada elemento en la disposición de identidad almacena B(K), donde el desplazamiento de elemento viene dado por E(K). Una clave (K) se considera duplicada si el elemento en el desplazamiento E(K) contiene E(K). Si el elemento contiene cualquier otro valor, la estructura de índice debe buscarse para determinar su duplicidad.
Para un intento de insertar una clave K en el índice se produce la siguiente secuencia de eventos. En primer lugar, se calcula E(K). Después se calcula B(K). Si el elemento en E(K) en la disposición de identidad contiene B(K), entonces se rechaza la inserción como una K duplicada. Sin embargo, si el elemento en E(K) en la disposición de identidad no contiene B(K), entonces el elemento se sobrescribe con B(K) y se realiza una búsqueda por el índice para determinar si la clave es una duplicada.
El uso de una disposición de identidad reduce considerablemente el área de almacenamiento requerida para contener la lista de las claves. Si una base de datos tuviera un millón de entradas, y cada clave tuviera una longitud de 32 bytes, entonces requeriría más de 32 Mb de memoria para almacenar en la caché el índice temporalmente en la memoria. Sin embargo, la disposición de identidad equivalente sólo ocuparía 4,4 Mb de memoria.
\newpage
Organizar índices por jerarquía
Tal como se observa en el presente documento, los índices de la técnica anterior usan normalmente gráficos de árbol con nodos que contienen uno o más ítems de datos de cuatro claves. Se navega por los gráficos de árbol (gráficos de decisión) hacia los bloques de hoja (conjuntos de conclusión) que contienen la información de valor de clave y puntero de la estructura de datos almacenada. Navegar por el índice puede requerir una o más operaciones de entrada/salida de disco para encontrar una clave elegida. Las operaciones de acceso de disco representan generalmente la mayor sobrecarga de rendimiento del índice ya que, en general, el acceso a disco es lento en comparación con el acceso a memoria, y pueden producirse atascos de datos. Para mitigar esta sobrecarga, los índices se dividen con frecuencia estando asignada cada división a un disco físico diferente, permitiendo de ese modo que las E/S del disco se solapen durante operaciones de índice para aumentar el rendimiento global del índice. Este método de subdividir el índice presenta una vista dimensional plana de la división de índice.
Según un decimocuarto aspecto de la presente invención, se proporciona un índice de base de datos dividido en una estructura jerárquica de modo que un índice puede delegar parte de su carga de trabajo a uno o más índices distintos.
Preferiblemente, un índice de delegación puede delegar por sí parte de su carga de trabajo a uno o más índices diferentes.
Un índice que participa en una jerarquía de índices de este tipo es responsable de un rango de subclaves. Cuando un índice de este tipo maneja un subrango de claves representando a otro índice, se conoce como un índice de delegación, y su subrango de clave se conoce como un manifiesto de clave.
Preferiblemente, el manifiesto de clave de un índice se define limitando un subconjunto contiguo de bytes dentro de la clave a un rango contiguo de valores posibles. Cualquier intento de insertar, borrar o actualizar o buscar una clave que no se adapta a un manifiesto de clave de índice se rechaza por un índice, si no, la operación de clave se maneja por el índice o uno de sus índices de delegación. La jerarquía puede disponerse de modo que cada índice puede tener cero, uno o más índices de delegación, pero cada índice sólo puede ser un delegado de otro índice.
Cuando un índice tiene uno o más índices de delegación, se envía una operación de insertar, actualizar o borrar una clave al índice de delegación con el manifiesto de clave apropiado. Si ninguno de los índices de delegación tiene un manifiesto de clave apropiado, entonces la operación debe manejarse por el propio índice.
Cuando un índice tiene uno o más índices de delegación, una operación de buscar un rango de claves se envía a todos los índices de delegación con manifiestos de clave apropiados y la búsqueda se realiza por el propio índice. Los resultados de consulta de los índices de delegación de búsqueda se combinan con el resultado de la búsqueda del propio índice. Todas las consultas pueden realizarse de manera simultánea. Es por tanto posible modificar una estructura de índice de modo que puede subdividirse el trabajo por diversos subíndices en la misma. Cada subíndice puede apuntar a un dispositivo de almacenamiento físico asociado permitiendo de ese modo que se produzcan múltiples accesos a disco
concurrentes. Esto reduce el atasco de disco y permite una operación más rápida de las bases de datos en su totalidad.
La presente invención se describirá adicionalmente, a modo de ejemplo, con referencia a los dibujos acompañantes, en los que:
la figura 1 es una vista general esquemática de la presente invención;
la figura 2 es una representación esquemática de la estructura lógica de un gráfico de decisión;
la figura 3 ilustra de manera esquemática la estructura de un nodo de decisión;
la figura 4 ilustra de manera esquemática la estructura de un conjunto de conclusión;
la figura 5 ilustra de manera esquemática la estructura de una entrada en un conjunto de conclusión;
la figura 6 ilustra de manera esquemática un procedimiento de búsqueda exacto;
la figura 7 ilustra de manera esquemática un procedimiento de búsqueda de rango;
la figura 8 ilustra de manera esquemática el procedimiento para insertar una clave;
la figura 9 ilustra de manera esquemática el procedimiento para borrar una clave;
la figura 10 ilustra de manera esquemática el procedimiento para una consulta de clave exacta;
la figura 11 ilustra de manera esquemática el procedimiento para un rango de consulta; y
la figura 12 ilustra de manera esquemática el procedimiento para atravesar un nodo con un grupo G de decisión, valor V de decisión, hacia rangos de clave mínimo y máximo, y devolver un resultado;
la figura 13 muestra la estructura de un conjunto de conclusión modificado;
la figura 14 ilustra de manera esquemática una primera manera de dividir un gráfico de decisión;
la figura 15 ilustra de manera esquemática una segunda manera de dividir un gráfico de decisión; y
la figura 16 ilustra de manera esquemática la configuración de una clave compuesta que tiene calificadores en la misma.
La figura 1 ilustra de manera esquemática una base de datos que incorpora un índice que constituye una realización de la presente invención y un almacenamiento de datos. El índice 2 comprende un gráfico 4 de decisión y una pluralidad de conjuntos 6, 8, 10, 12 y 14 de conclusión. A cada conjunto de conclusión se llega por un trayecto, y sólo uno, a través del gráfico de decisión. Sin embargo, cada conjunto de conclusión apunta entonces a entradas relevantes dentro de un almacenamiento 16 de datos.
La figura 2 ilustra de manera esquemática la estructura de un gráfico de decisión, indicado generalmente con 20. El gráfico de decisión empieza en un origen 22. Toda la navegación a través del gráfico de decisión debe comenzar en el origen. El origen puede tener cero (por ejemplo, cuando la base de datos es nueva), uno o dos punteros de decisión que apuntan a nodos adicionales dentro del gráfico de decisión o a conjuntos de conclusión. Cada nodo de decisión diferente puede contener 0, 1 ó 2 punteros de decisión, apuntando cada puntero de decisión o bien a otro nodo de decisión o a un conjunto de conclusión. A los punteros de decisión en un nodo de decisión se hará referencia en el presente documento como "el puntero bajo" y "el puntero alto".
Un puntero de decisión en cualquier nodo de decisión en el gráfico de decisión sólo puede apuntar o bien a otro nodo de decisión en el mismo gráfico de decisión o a un único conjunto de conclusión. Debe apuntarse a cualquier nodo de gráfico de decisión exactamente por un nodo de decisión diferente dentro del mismo gráfico de decisión o por el origen. De manera similar, debe apuntarse a cualquier conjunto de conclusión exactamente por sólo un nodo de decisión dentro del gráfico de decisión. Por tanto, sólo puede llegarse a cualquier conjunto de conclusión siguiendo un trayecto individual y único a través del gráfico de decisión desde el origen. Este trayecto único se conoce como un trayecto de navegación.
La figura 3 ilustra de manera esquemática con más detalle la estructura lógica de un nodo de decisión, indicada generalmente con 40. El nodo de decisión incluye un tipo de puntero bajo, un puntero bajo, un tipo de puntero alto y un puntero alto. El tipo 41 de puntero bajo indica el objetivo del puntero 42 bajo. El tipo 41 de puntero bajo puede indicar si el puntero 42 bajo apunta a un nodo de decisión o a un conjunto de conclusión. El puntero 42 bajo proporciona la dirección del nodo de decisión o del conjunto de conclusión al que apunta. Un valor de cero puede insertarse para indicar que no existe ningún puntero. De manera similar, un tipo 44 de puntero alto indica si el puntero 45 alto apunta a un nodo de decisión o un conjunto de conclusión. El puntero alto indica la dirección del nodo de decisión o del conjunto de conclusión al que apunta. De nuevo, un valor de cero puede usarse para indicar que no existe ningún puntero. Esto habilita la estructura a modo de "árbol" del gráfico de decisión que va a representarse y almacenarse con un procesador de datos y su memoria.
La figura 4 ilustra de manera esquemática la estructura de un conjunto de conclusión. Un conjunto de conclusión comprende una pluralidad de entradas 60, 62, 64, 66 y 68 de clave y de propiedades unidas entre sí por un enlace dirigido que proporciona la dirección de la siguiente entrada en el conjunto de conclusión. La figura 5 ilustra de manera esquemática la estructura lógica de cada entrada dentro del conjunto de conclusión. La entrada consiste en tres campos, concretamente un campo 80 de enlace, un campo 82 de clave y un campo 84 de propiedades. El campo de enlace apunta a la siguiente entrada de conjunto de conclusión. El valor de cero puede indicar que no hay más entradas. El campo 82 de clave contiene el valor exacto de una clave mientras que el campo 84 de propiedades contiene las propiedades asociadas con esa clave, por ejemplo, la dirección de los datos correspondiente al campo 82 de clave. Habiendo definido los componentes del índice, a continuación se comenta cómo usar y navegar por el índice.
Con el fin de navegar a lo largo del índice, cada nodo de decisión visitado a lo largo de un trayecto de navegación se refiere a uno o un grupo de bits dentro de la clave. Este grupo de bits se conoce como un "grupo de decisión", pudiendo establecerse el número de bits en el grupo de decisión para que incluya cualquier número de bits entre un único bit y todos los bits de la clave.
El rango de valores posibles tomado por el grupo de decisión se conoce como el "rango de decisión" y está limitado por un valor mínimo de rango de decisión y un valor máximo de rango de decisión. El valor mínimo de rango de decisión puede ser cualquier valor menor que todos los bits establecidos en el grupo de decisión, y de manera similar el valor máximo de rango de decisión puede ser cualquier valor mayor que el mínimo de rango de decisión. Por comodidad, los valores mínimo y máximo pueden representarse en un sistema de notación de magnitud sin
signo.
Cada nodo de decisión tiene un valor de decisión asociado. El valor de decisión determina si se sigue un puntero bajo o un puntero alto cuando se navega a través del nodo de decisión. El puntero alto se usa cuando el valor del grupo de bits de decisión examinado en la clave es mayor que el valor de decisión, si no, se usa el puntero bajo.
La comparación del valor de decisión se realiza de manera ventajosa usando notación de magnitud sin signo. El valor de decisión puede establecerse en cualquier valor elegido por el gestor, diseñador u operador de sistema, pero de manera ventajosa se selecciona de uno de los siguientes:
1.
La mediana matemática de todos los valores posibles del grupo de decisión.
2.
La mediana matemática de todos los valores esperados de grupos de decisión.
3.
El promedio matemático de todos los valores esperados del grupo de decisión.
4.
Un valor arbitrario especificado en el momento de creación del índice.
5.
La mediana del valor de decisión actual (es decir, el valor de decisión usado más recientemente) y el valor de decisión que lo precede.
La selección de un grupo de decisión en un nodo de decisión visitado puede, de manera ventajosa aunque no necesariamente, basarse en uno o más de los siguientes:
i.
El grupo de decisión puede ser el mismo para todos los nodos de decisión.
ii.
El grupo de decisión puede cambiarse en cada visita a un nodo de decisión.
iii.
El grupo de decisión puede cambiarse cuando el valor de decisión del nodo de decisión anterior llega o se aproxima al máximo de rango de decisión o mínimo de rango de decisión del grupo de decisión actual.
iv.
El grupo de decisión puede cambiarse cuando el valor de decisión entre nodos sucesivos cambiaría por menos de una unidad o por menos de algún otro umbral predeterminado.
El tamaño del grupo de decisión en un nodo de decisión puede determinarse basándose en uno o más parámetros. El tamaño de un grupo de decisión puede fijarse, por ejemplo, para todos los nodos de decisión. Sin embargo, el tamaño puede aumentarse a partir del grupo de decisión anterior cuando se selecciona un nuevo grupo de decisión o, de manera alternativa, el tamaño puede disminuirse a partir del grupo de decisión anterior cuando se selecciona un nuevo grupo de decisión.
La posición de un grupo de decisión, respecto a la clave, en un nodo de decisión puede basarse en uno o más de los siguientes. La posición del grupo de decisión puede fijarse para todos los nodos de decisión. De manera adicional y/o alternativa, la posición del grupo de decisión puede ser un desplazamiento fijo a partir del grupo de decisión anterior cuando se selecciona un nuevo grupo de decisión.
De manera ventajosa pueden imponerse restricciones adicionales si el índice va a soportar recuperación de clave mediante coincidencia de rango. En particular el bit más significativo debe incluirse dentro de un nodo significativo de manera jerárquica, tal como el origen. Entonces debería cambiarse la importancia del grupo de decisión dentro de la clave global de manera monótona de importancia decreciente.
Es ventajoso considerar algunos ejemplos de cómo puede navegarse por el índice. La figura 6 muestra cómo puede navegarse por una clave de cuatro bytes en una búsqueda de coincidencia exacta. En este ejemplo las claves se almacenan en codificación ASCII y los números mostrados frente a cada clave muestran su valor en notación hexadecimal. En este ejemplo, cada grupo de decisión tiene un tamaño fijo de cuatro bits. El grupo de decisión se mueve de manera secuencial hasta los cuatro bits menos significativos siguientes en cada nuevo nodo visitado. En este ejemplo, el bit más significativo se designa cero, el siguiente bit más significativo es uno, el siguiente más significativo es dos y así sucesivamente. Además, por motivos de simplicidad, el valor de decisión aplicado en cada nodo es cuatro. Por tanto, si el grupo de decisión tiene el valor cero, uno, dos, tres o cuatro el gráfico se atraviesa hacia la izquierda. Sin embargo, si el grupo de decisión tiene un valor del rango de cinco a quince el gráfico se atraviesa hacia la derecha.
Tal como se muestra en la figura 6, se presentan varios nombres a la base de datos. Estos nombres o valores de clave, son Fred, John, Bill, Zoe, Eric y Pete. El equivalente hexadecimal de cada clave está ubicado de manera adyacente al nombre. El proceso de navegación que va a describirse es adecuado para inserción, borrado o coincidencia.
Inicialmente las claves se presentan a un primer nodo 100 de decisión en el que se prueban los bits cero a tres. Puesto que cada palabra hexadecimal ocupa un byte, es evidente que los bits cero a tres corresponden al primer carácter en las claves. Por tanto, como Fred, John, Bill y Eric empiezan todos con un "4" sus claves se propagan hacia la izquierda a lo largo de la rama 102 a un nodo 104 de segundo nivel. Sin embargo, tanto Zoe como Pete tienen cuatro bits iniciales que están fuera del rango cero a tres, y por consiguiente sus claves se propagan a lo largo de un trayecto 106 de puntero alto al nodo 108.
Los nodos 104 y 108 ocupan el segundo nivel del gráfico de decisión y por consiguiente sus decisiones se basan en los siguientes cuatro bits en la clave. Esto corresponde a mirar al siguiente carácter en la representación hexadecimal. Por tanto el nodo 104 Bill se pasa a lo largo de un puntero 110 de nivel bajo a un nodo posterior (no mostrado) puesto que los bits 4 a 7 en la clave codifican el valor 2, mientras que Fred, John y Eric se pasan a lo largo de un puntero 112 de nivel alto a un nodo adicional (no mostrado) porque sus bits cuatro a siete en su clave codifican los valores 6, A y 5 respectivamente en notación hexadecimal. De manera similar, en el nodo 108, la clave Pete se pasa a lo largo de un puntero 114 de nivel bajo puesto que los bits 4 a 7 en el mismo codifican el valor cero, mientras que Zoe se pasa a lo largo de un puntero 116 de nivel alto puesto que los bits 4 a 7 codifican el valor "A". Este proceso puede repetirse hasta que se haya realizado una búsqueda suficiente en la clave para llegar a un conjunto de conclusión.
La figura 7 ilustra de manera esquemática cómo puede navegarse por una clave de cuatro bytes en una búsqueda de coincidencia de rango. Como con la figura 6, las claves se almacenan en codificación ASCII y los valores ASCII frente a cada clave para mostrar su valor en notación hexadecimal.
En este ejemplo, el grupo de decisión tiene un tamaño fijo de ocho bits. El grupo de decisión se mueve hacia los ocho bits menos significativos siguientes sólo cuando se agota el rango de decisión; es decir, cuando el valor de decisión llega a cualquier límite del rango de decisión. En este ejemplo, el bit más significativo se designa bit cero, el siguiente bit más significativo uno, y así sucesivamente tal como con el ejemplo mostrado en la figura 6. El rango de decisión en cada nodo es del hexadecimal 30 a 50 con el fin de cubrir todos los dígitos y letras mayúsculas representadas en el formato ASCII. El valor de decisión en cada nodo usado para un nuevo grupo de decisión es hexadecimal 48, y se cambia entonces para ser el promedio de los valores de decisión anteriores del mismo grupo de decisión en cada nodo posterior para el mismo grupo. Cuando sólo se conoce un valor de decisión anterior, entonces se usa el límite mínimo o máximo del rango de valor de decisión dependiendo de si ya se ha navegado por la izquierda o por la derecha, respectivamente.
Usando las mismas claves que en el ejemplo anterior, las claves se presentan a un primer nodo 118 que examina los primeros ocho bits, cero a siete, y los compara frente al valor 48 (hexadecimal) de decisión. Con las claves tal como se muestran, Fred, Bill y Eric pasan a lo largo de un puntero bajo al nodo 122, mientras que John, Zoe y Pete a lo largo de un puntero 124 alto al nodo 126.
En el nodo 122, se vuelve necesario cambiar el valor de decisión. El valor de decisión usado para este nuevo grupo de decisión se cambia al valor mediano de los grupos de decisión anteriores a los que se ha llegado a lo largo del mismo trayecto. Siempre que sólo se conozca un valor de decisión anterior, como en este caso, se usa el límite mínimo o máximo del rango de valor de decisión. Dado que se navegó por el nodo 122 de cuatro frente al puntero 120 bajo, entonces se usa el límite inferior del rango de decisión.
Por tanto, con el fin de calcular el nuevo valor de decisión se requiere encontrar la mediana de los números en el rango de hexadecimal 30 a hexadecimal 48 explícitamente, este grupo de números es 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 3A, 3B, 3C, 3D, 3E, 3F, 40, 41, 42, 43, 44, 45, 46, 47 y 48. A partir de esto, puede verse que el valor mediano es 3C. Estableciendo éste como el valor de decisión, Fred, Bill y Eric continúan todos a lo largo del puntero 127 alto. Al siguiente nodo (no mostrado) cuyo valor de decisión será el valor mediano del rango que se extiende desde el hexadecimal 3C al hexadecimal 48.
De manera similar, el nodo 126 al que se ha llegado a lo largo del punto 124 alto desde el nodo 118 tiene un nuevo valor de decisión calculado, que en este caso será 4C (hexadecimal). Aplicando la clave en este nodo, John pasará a la izquierda (puntero bajo) porque contiene el valor 4A que es menor que el valor de decisión de 4C, mientras que Zoe y Pete pasan a la derecha (puntero alto) porque contienen el valor 5A y 50, respectivamente, que es mayor que el valor de decisión 4C.
Un ejemplo adicional de búsqueda puede verse en el contexto de búsqueda de carácter, por tanto se realiza una búsqueda usando los siguientes criterios:
\bullet
Un índice de coincidencia exacta en una clave de carácter ASCII ocupando cada carácter 8 bits y estando sólo en el rango "A" a "Z".
\bullet
Un grupo de decisión de 8 bits fijo.
\bullet
Un origen de gráfico de decisión de los 8 bits más significativos (el primer carácter).
\bullet
El grupo de decisión avanza 8 bits (un carácter) para cada nodo de decisión.
Los códigos ASCII para "A" y "Z" son 65 y 90 respectivamente. Por lo tanto un valor de decisión sensible para este grupo es el valor mediano (es decir, 78).
En este ejemplo, el grupo de decisión avanza un carácter (8 bits) cada vez que se llega a un nuevo nodo de decisión. Se realiza una comparación del valor de los bits en el grupo de decisión dentro de la clave con el valor (78) de decisión fijo para determinar qué puntero seguir.
Un enfoque más sofisticado implica cambiar el valor de decisión en cada movimiento a un nuevo nodo de decisión. Por tanto, el rango de decisión para un grupo de decisión está limitado por el mínimo de rango de decisión y el máximo de rango de decisión, que son 65 a 90 respectivamente. Cuando se mueve al siguiente nodo de decisión, un operador puede elegir seleccionar el nuevo valor de decisión usando la mediana del valor de decisión actual y anterior. Cuando éste es un nuevo grupo de decisión y no está disponible ningún valor de decisión anterior, entonces puede usarse el valor de rango de decisión mínimo o máximo (dependiendo de si se siguió un puntero alto o bajo, respectivamente). La selección de un nuevo grupo de decisión puede realizarse cuando el valor de decisión cambia por menos de 1 o algún otro umbral predefinido. A continuación se da un ejemplo de cómo un valor de decisión cambia.
El grupo de decisión en la clave tiene un valor de 82. El valor de decisión de partida para un nuevo grupo es 78. El rango de decisión es 65 a 90. El grupo de decisión se ha establecido de modo que se selecciona un nuevo grupo cuando el valor de decisión cambia por menos de 1.
1
Debe observarse que los índices que no se requiere que soporten recuperación de clave mediante coincidencia de rango no están tan limitados como los que sí. En particular, los índices que no se requiere que soporten coincidencia de rango pueden tener cualquier grupo de decisión en su origen, y pueden cambiar la posición del grupo de decisión de manera arbitraria y pueden cambiar también los grupos de decisión de manera arbitraria cuando el valor de decisión se acerca (tal como pueda definir el diseñador de sistema o tal como pueda seleccionar un usuario o alguna función de gestión) a los límites de rango de decisión, que son los valores máximo y mínimo del rango de decisión, o el valor de decisión cambia por menos de una cantidad preseleccionada.
Cuando se atraviesa un trayecto de navegación con el fin de insertar, borrar o recuperar una clave candidata, el grupo de decisión de la clave candidata se compara en cada nodo de decisión visitado con el valor de decisión del nodo de decisión y se sigue el puntero bajo o puntero alto hasta el siguiente nodo de decisión o conjunto de conclusión. Una vez que se ha llegado a un conjunto de conclusión se completa el desplazamiento a lo largo de trayecto de navegación. El desplazamiento a lo largo del trayecto de navegación también se completa cuando un valor de grupo de decisión indica el uso de un puntero de decisión que no existe.
Un conjunto de conclusión consiste en una serie de claves y propiedades asociadas. El número de claves contenidas dentro de un conjunto de conclusión está limitado por un límite superior que puede determinarse mediante uno o más de una combinación de:
1.
Un límite fijo;
2.
Un límite especificado en el momento en que se crea el índice;
3.
Un límite que puede especificarse a lo largo de la vida del índice; y
4.
Un límite que varía en función del crecimiento de índice.
La figura 8 ilustra el procedimiento para insertar una clave (K) con propiedades (Q). El procedimiento comienza en la etapa 150 en la que se introduce el índice en su origen con un grupo de decisión, DG, inicial o por defecto tal como establezca el diseñador. Se implementa un algoritmo con el fin de calcular un valor DV_{0} de decisión de inicio. El control se pasa a continuación a la etapa 152 que prueba si el grupo de decisión en la clave es mayor que el valor de decisión. Si la prueba es satisfactoria, se pasa el control a la etapa 154 en la que se examina el puntero HP alto y se crea un nuevo valor DV_{1} de decisión.
A partir de la etapa 154 el control se pasa a la etapa 156 en la que se realiza una comprobación para ver que el puntero (ya sea éste un puntero alto o un puntero bajo) existe. De manera similar, si la etapa 152 indica que el grupo de decisión en la clave no es mayor que el valor de decisión, entonces el control se pasa a la etapa 158 en la que se examina el puntero bajo y se calcula un nuevo valor DV_{1} de decisión. El control pasa de la etapa 158 a la etapa 156. De la etapa 156, el control se pasa a la etapa 160 siempre que exista el puntero. La etapa 160 realiza una prueba para ver si el puntero apunta a un nodo de decisión adicional. Si el puntero apunta a un nodo de decisión, entonces el control se pasa a la etapa 162 que avanza la prueba al siguiente nodo de decisión. De la etapa 162 el control se pasa a la etapa 164 que realiza una prueba para ver si el grupo de decisión debería cambiarse. Si la respuesta a esta prueba es que sí, entonces el control se pasa a la etapa 166 que calcula el valor del nuevo grupo de decisión según los criterios tal como se expusieron anteriormente en el presente documento. El control se pasa entonces desde o bien la etapa 164 o bien la 166 de vuelta a la etapa 152.
Si la etapa 156 determina que un puntero no existe, el control se pasa a la etapa 170 para provocar la creación de un nuevo conjunto de conclusión y entonces a la etapa 172 que actualiza el puntero para apuntar al nuevo conjunto de conclusión. El control se pasa entonces a la etapa 174 que añade la clave y sus propiedades al conjunto de conclusión.
Además, si la etapa 160 no apunta a un nodo de decisión, entonces debe apuntar a un conjunto de conclusión y el control se pasa a la etapa 176 que provoca tener que realizar un salto al conjunto de conclusión pertinente y desde ahí a la etapa 174 de modo que la clave y sus propiedades se añaden al conjunto de conclusión.
Se realiza una prueba en la etapa 175 para ver si el conjunto de conclusión ha superado su límite de tamaño. Si el conjunto de conclusión no ha crecido demasiado, el control se pasa a la etapa 178 que representa una salida del procedimiento de inserción de clave; sin embargo, si el conjunto de conclusión ha llegado a su límite de tamaño entonces el control se pasa a la etapa 180 que crea un nuevo nodo de decisión sin punteros. De la etapa 180 el control pasa a la etapa 182 que actualiza el puntero del nodo de decisión anterior para apuntar al nuevo nodo de decisión en lugar de al conjunto de conclusión antiguo. El control se pasa entonces a la etapa 184 que examina el conjunto CS(S) de conclusión antiguo para ver si está vacío. Si no está vacío el control se pasa a la etapa 186 que va a la primera clave y entrada de propiedad en el conjunto CS(S) de conclusión y vuelve a navegar por el índice con el fin de encontrar el nuevo conjunto de conclusión en el que debería colocarse esta entrada. Una vez que la entrada se ha reasignado a un conjunto de conclusión, se elimina de su conjunto CS(S) de conclusión actual en la etapa 188. El control se devuelve entonces a la etapa 184 y el proceso se repite hasta el momento en que el conjunto CS(S) de conclusión esté vacío. El control se pasa entonces a la etapa 190 que representa un punto de salida del procedimiento de inserción de
clave.
Por tanto, en general, el procedimiento para insertar una clave y sus propiedades asociadas en el índice requiere la navegación a lo largo del trayecto de decisión para insertar la clave. Si el trayecto de navegación termina sin llegar a un conjunto de conclusión, entonces tiene que crearse un nuevo conjunto de conclusión y actualizarse un puntero de decisión de modo que apunte al nuevo conjunto de conclusión. El nuevo puntero de decisión debe colocarse en el gráfico de decisión en el punto en el que se termine de atravesar el gráfico de decisión. Sin embargo, si el trayecto de navegación termina en un conjunto de conclusión, entonces la clave y sus propiedades se insertan en este conjunto de conclusión. Cada modificación de un conjunto de conclusión varía el tamaño de ese conjunto. Por tanto, si se inserta una nueva clave en un conjunto de conclusión y esto provoca o provocaría que el conjunto superara su límite superior, entonces tiene que crearse un nuevo nodo de decisión. Un nuevo grupo de decisión y/o valor de decisión tiene que asociarse con el nuevo nodo de decisión y el puntero de decisión que anteriormente apuntaba al conjunto de conclusión lleno, tiene que modificarse para apuntar al nuevo nodo de decisión. Entonces cada ítem del antiguo (ahora lleno) conjunto de conclusión tiene que volver a insertarse en el nuevo conjunto o conjuntos de conclusión siguiendo el trayecto de navegación a lo largo del índice.
Los datos en la base de datos se desarrollarán a lo largo del tiempo y este desarrollo incluirá el borrado de claves y datos, o bien porque los datos ya no son pertinentes para la base de datos o porque es necesario eliminarlos con fines de archivo con el fin de que la versión "actual" de la base de datos no quede atestada de datos no pertinentes u obsoletos. La figura 9 ilustra de manera esquemática el procedimiento para borrar una clave. Algunas de las etapas son idénticas a las que se describieron con respecto a la figura 8, y por consiguiente se ha dado a estas etapas los mismos números de referencia. Por tanto, las etapas 150 a 166 son idénticas a las que ya se han descrito, con la excepción de que si la prueba realizada en la etapa 156 indica que el puntero no existe, entonces el control se pasa a la etapa 200 que representa una salida del procedimiento de borrado.
La etapa 160 pasa el control a la etapa 176 si la prueba en la etapa 160 determina que el puntero no apunta a un nodo de decisión (tal como fue el caso con el procedimiento para insertar una clave). De la etapa 176 el control se pasa a la etapa 202 en la que se realiza una prueba para ver si el conjunto CS(S) de conclusión está vacío. Si el conjunto de conclusión está vacío, el control se pasa a la etapa 204 que representa una salida del procedimiento, si no, el control se pasa a la etapa 206 que implementa una exploración a través de las entradas en el conjunto de conclusión. La exploración comienza con la primera clave (L) en el conjunto de conclusión y el control se pasa entonces a la etapa 208 en la que se realiza una prueba para ver si la clave (L) es igual a la clave de borrado. Si es así, el control se pasa a la etapa 210 en la que la clave (L) y sus propiedades se borran del conjunto de conclusión. De la etapa 210 el control se pasa a la etapa 214 en la que se realiza una prueba para ver si la clave (L) es la última clave en el conjunto de conclusión. El control se pasa también a la etapa 214 desde la etapa 208 si la clave (L) no es la misma que la última clave de borrado. El control se pasa entonces a la etapa 216 en la que se selecciona la siguiente clave y el control se pasa entonces a 208. Si no, el control se pasa de la etapa 214 a la etapa 218 que representa una salida de este procedimiento.
Por tanto, en general, borrar una clave y sus propiedades asociadas del índice requiere la navegación a lo largo del trayecto de navegación para borrar la clave. Si el trayecto de navegación termina sin llegar a un conjunto de conclusión, entonces se considera que la clave no existe en el índice. Sin embargo, si el trayecto de navegación termina en un conjunto de conclusión, entonces debe comenzarse una exploración a través de un conjunto de conclusión para todas las claves que son exactamente iguales a la clave que va a borrarse. Estas claves y sus propiedades asociadas se eliminan entonces del conjunto de conclusión.
La figura 10 muestra el procedimiento para una consulta exacta de una clave, y para devolver el resultado. El procedimiento comparte gran cantidad de similitudes con el procedimiento para borrar una clave y las etapas 150 a 206 son tal como se describió en referencia a la figura 9. Sin embargo, se inserta una etapa 151 adicional entre las etapas 150 y 152 en la que un conjunto (R) de resultados se reinicia a la condición vacía. Siguiendo la navegación por el índice al conjunto de conclusión en la etapa 202, el control se pasa a la etapa 206 que inicia una exploración secuencial a través del conjunto de conclusión. De la etapa 206, el control se pasa a la etapa 230 en la que se realiza una prueba para ver si la clave (L) que está examinándose actualmente es igual a la clave de búsqueda. Si es así, el control se pasa a la etapa 232, si no, el control se pasa a la etapa 234. En la etapa 232 la clave y sus propiedades se añaden a la lista (R) de resultados de consulta de búsqueda, el control se pasa entonces a la etapa 234. La etapa 234 realiza una prueba para ver si la clave que está examinándose actualmente es la última en el conjunto de conclusión. Si no es así, se examina la siguiente clave y el control se pasa a la etapa 230. Si la clave es la última clave, el control se pasa desde 234 a la etapa 236 que representa una salida de esta rutina.
La figura 11 ilustra de manera esquemática el procedimiento para realizar una consulta de rango con un valor (I) de clave mínimo, un valor (A) de clave máximo y para devolver el resultado (R). El procedimiento comienza en la etapa 300 en la que el conjunto (R) de resultados se reinicia a una o condición vacía o nula. El control pasa entonces a la etapa 302 en la que el grupo de decisión y se calculan los valores de decisión y a partir de entonces el control se pasa a la etapa 304 en la que el índice se atraviesa con el fin de encontrar los resultados que coinciden con la consulta de rango. El procedimiento para atravesar el índice se muestra con mayor detalle en la figura 12. El procedimiento comienza en la etapa 350 en la que se entra en el procedimiento en su nodo de partida. El control pasa entonces a la etapa 352 en la que se realiza una prueba para ver si la clave mínima es menor que o igual al valor de decisión (o se ha omitido) y si la clave máxima es mayor que su valor de decisión asociado (o se ha omitido). Si el resultado de la prueba es tal que se cumplen ambas condiciones el control pasa a la etapa 370, si no, el control pasa a la etapa 354. La etapa 370 realiza una comprobación para ver si se ha establecido un puntero bajo, si es así el control pasa a la etapa 372 en la que se realiza una comprobación para ver si el puntero bajo apunta a un conjunto de conclusión. Si es así, el control se pasa a la etapa 400. Si no es así, el control se pasa a la etapa 374 en la que se recalculan el grupo de decisión y los valores de decisión y se usan para atravesar el índice desde el nodo al que se ha llegado a través del puntero. El procedimiento tiene la capacidad de llamarse a sí mismo, y como tal es recursivo. El control pasa entonces a la etapa 376 en la que se realiza una comprobación para ver si existe un puntero alto, si no, el control se pasa a la etapa 378 que representa una salida, y si es así, el control se pasa a la etapa 390 en la que se realiza una prueba para ver si el puntero alto apunta a un conjunto de conclusión, si es así, el control se pasa a la etapa 400, mientras que si el puntero alto no apunta a un conjunto de conclusión el control se pasa a la etapa 392 en la que se calculan un nuevo grupo de decisión y valor de decisión y se atraviesa adicionalmente el índice tomando el nuevo nodo como un nodo de inicio.
Volviendo casi al comienzo del procedimiento, en esos casos en los que la etapa 352 ha pasado el control a la etapa 354, la etapa 354 realiza una prueba para ver si tanto el valor de clave mínimo como el valor de clave máximo son menor que o igual al valor de decisión. Si lo son, el control se pasa a la etapa 356, si no, el control se pasa a la etapa 358. La etapa 356 realiza una prueba para ver si existe un puntero bajo, si no, el control se pasa a 357 que representa una salida del procedimiento, si no, el control se pasa a la etapa 360. La etapa 360 realiza una prueba para ver si el puntero bajo apunta a un conjunto de conclusión, si es así, el control se pasa a la etapa 400, si no, el control se pasa a la etapa 402 que recalcula el grupo de decisión y el valor de decisión e invoca el procedimiento de atravesar de manera recursiva. Volviendo a la etapa 358, se realiza una prueba para ver si existe el puntero alto, si es así, el control se pasa a la etapa 362, si no, el control se pasa a la etapa 364 que representa una salida del procedimiento. La etapa 362 realiza una prueba para ver si el puntero alto apunta a un conjunto de conclusión, si es así, el control se pasa a la etapa 400, si no, el control se pasa a la etapa 364 que calcula un nuevo grupo de decisión y valor de decisión y provoca que se vuelva a atravesar el índice partiendo de estos nuevos valores.
La etapa 400 realiza una prueba para ver si el conjunto (S) de conclusión está vacío, si es así, el control se pasa a la etapa 404 que representa una salida del procedimiento. Si el conjunto de conclusión no está vacío, entonces se inicia una exploración secuencial de esas entradas en el conjunto de conclusión, empezando en la etapa 406 en la que se selecciona la primera clave en el conjunto de conclusión. El control se pasa entonces a la etapa 408 en la que se realiza una prueba para ver si la clave (L) está dentro del rango definido por los valores de clave máximo y mínimo. Si el resultado de la prueba es "sí" entonces se añaden la clave y sus propiedades al conjunto (S) de conclusión en la etapa 410 mientras que si la prueba en la etapa 408 es negativa, el control se pasa a la etapa 412 en la que se realiza una prueba para ver si la clave que está considerándose actualmente es la última clave en el conjunto de conclusión, si lo es, el control se pasa a la etapa 414 que representa una salida del procedimiento. La etapa 410 también pasa el control a la etapa 412. Si la prueba en la etapa 412 determina que la clave que está considerándose no es la última clave, entonces se selecciona la siguiente clave en el conjunto de conclusión en la etapa 416 y el control se devuelve a la etapa 408.
Por tanto, en general, la recuperación de claves y de sus propiedades de rango mediante una coincidencia de rango usando un valor de clave de búsqueda mínimo opcional y un valor de clave de búsqueda máximo opcional requiere atravesar de manera recursiva el gráfico de decisión desde el origen, con la comparación continua de los bits de grupo de decisión en las claves de búsqueda máxima y mínima con el valor de decisión en cada nodo de decisión. Si la magnitud sin signo de los bits de clave de búsqueda mínima en el grupo de decisión es menor que o igual al valor de decisión y la magnitud sin signo de los bits de clave de búsqueda máxima en el grupo de decisión es mayor que el valor de decisión entonces, en primer lugar, se toman medidas para atravesar el gráfico de decisión al que se ha llegado desde el puntero bajo usando la clave de búsqueda mínima y omitiendo la clave de búsqueda máxima; y en segundo lugar, se toman medidas para atravesar el gráfico de decisión al que se ha llegado desde el puntero alto usando la clave de búsqueda máxima y omitiendo la clave de búsqueda mínima.
Si la magnitud sin signo de los bits de clave de búsqueda mínima y de clave de búsqueda máxima en el grupo de decisión son ambos menores que o iguales al valor de decisión, entonces se atraviesa el gráfico de decisión al que se ha llegado desde el puntero bajo usando tanto la clave de búsqueda mínima como la clave de búsqueda máxima. Si la magnitud sin signo de los bits de clave de búsqueda mínima y de clave de búsqueda máxima en el grupo de decisión son ambos mayores que el valor de decisión, entonces se atraviesa el gráfico de decisión al que se ha llegado desde el puntero alto usando tanto la clave de búsqueda mínima como la clave de búsqueda máxima.
Es evidente que se requiere atravesar repetidamente varias veces el gráfico de decisión. Si todos los trayectos de navegación resultantes de atravesar terminan sin llegar a un conjunto de conclusión, entonces se considera que no existe ninguna clave de coincidencia en el índice. Para los trayectos de navegación que terminan en un conjunto de conclusión, entonces se realiza una exploración a través de todas las claves en los conjuntos de conclusión y todas las claves que coinciden con las propiedades requeridas dentro del rango de búsqueda se devuelven como resultados de búsqueda.
Como parte de la implementación de la base de datos dentro de un procesador de datos y sistema de almacenamiento, es ventajoso, aunque no obligatorio, que el tamaño del conjunto de conclusión sea un entero múltiplo del tamaño de transferencia de bloques del dispositivo de almacenamiento, esto proporciona un uso óptimo de la memoria física. También es ventajoso, aunque no obligatorio, que el gráfico de decisión se divida en bloques que sean de un tamaño que es un entero múltiplo del tamaño de transferencia de bloques del dispositivo de almacenamiento. Esto tiene la ventaja de que, cuando un bloque de decisión se llena, puede crearse un nuevo bloque y nuevos punteros de decisión pueden apuntar al nuevo bloque cuando sea apropiado.
Con el fin de conseguir el funcionamiento rápido de la base de datos, es ventajoso que el gráfico de decisión esté contenido total o parcialmente, en uso, dentro de la memoria de semiconductores del sistema de procesamiento de datos, evitando de ese modo las sobrecargas de tiempo asociadas con el acceso a disco. Como mejora adicional, es preferible también que los conjuntos de conclusión se almacenen dentro de la memoria de semiconductores, o que al menos, una vez identificado un conjunto de conclusión, se permute a la memoria de semiconductores de modo que pueda realizarse rápidamente la exploración secuencial del conjunto de conclusión.
La configuración óptima para la coincidencia de rango de todos los tipos de clave es usar un grupo de bits de decisión de un bit con un valor de decisión de cero fijo. El grupo de decisión en el origen es el bit más significativo y el grupo de decisión avanza un bit (hacia el bit menos significativo) para cada nodo de decisión visitado. Para una coincidencia de clave exacta numérica o de fecha/hora, la configuración de bit óptima parece ser usar un grupo de bits de decisión de un bit con un valor de decisión de cero fijo. El grupo de decisión en el origen es el bit menos significativo y el grupo de decisión avanza un bit (hacia el bit más significativo) para cada nodo de decisión visitado. Para la búsqueda de claves basadas en ASCII, la configuración de bit óptima para la coincidencia exacta es usar un grupo de decisión de ocho bits. Los valores de decisión óptimos dependerán del rango de caracteres esperados.
Claves transitorias
La figura 13 ilustra de manera esquemática la estructura de datos de un conjunto 600 de conclusión/bloque de hojas que constituye una realización de la presente invención. El conjunto de conclusión contiene una base 602 de antigüedad que representa la fecha y la hora de la actualización más reciente del conjunto 600 de conclusión. Contiene también una pluralidad de entradas 604, 606 y 608 de clave. Considerando sólo la entrada 608 de clave por motivos de brevedad, esta se divide adicionalmente en tres partes, en concreto una antigüedad 608A de entrada, una información 608B de clave de entrada y una información 608C de propiedad de entrada.
Cuando se realiza una entrada transitoria, tiene datos 608A de antigüedad de entrada asociados con ella. Estos datos se refieren a una unidad de antigüedad y a un límite de antigüedad que puede establecerse para el índice de manera global, pero opcionalmente podría establecerse para conjuntos de conclusión individuales. La unidad de antigüedad especifica el número de segundos en una única unidad de antigüedad. Por tanto, por ejemplo, un valor de 60 implica un minuto, mientras que 86400 implica un día. El límite de antigüedad representa el número de unidades de antigüedad después del cual la clave puede perderse del índice. Éste está normalmente en el rango de 1 a 254, permitiéndole de ese modo caber dentro de una palabra de 8 bits. Por tanto, si se establece que una clave va a expirar tras 31 días, la unidad de antigüedad se establece en 86400 segundos y el límite de antigüedad se establece en 31. Para claves que van a expirar tras un día, la unidad de antigüedad y el límite de antigüedad pueden establecerse en 3600 segundos y 24, respectivamente.
Cada entrada contiene una antigüedad de entrada, expresada en un byte por motivos de eficacia, y ésta puede establecerse entre el valor cero y 255, en este ejemplo, aunque pueden elegirse otros rangos de valores según sea apropiado. Cero indica que una entrada es nueva, o menor que una unidad de antigüedad más antigua que la base de antigüedad. 255 indica que la entrada está obsoleta.
Para cada actualización o inserción en el conjunto de conclusión, se sigue la secuencia siguiente. En primer lugar se anota la fecha y hora actuales, y entonces se calcula el número de unidades de antigüedad transcurridas entre la base de antigüedad y los datos y hora actuales. Entonces, se incrementa la antigüedad de cada entrada en el conjunto de conclusión por el número de unidades de antigüedad transcurridas. Cualquier entrada con una antigüedad de entrada calculada para ser mayor que o igual a 255 tiene su antigüedad de entrada establecida en 255. Cualquier entrada de este tipo se vuelve disponible entonces para su reutilización. Entonces la base de antigüedad se establece según la fecha y la hora anotadas al comienzo del procedimiento. Cualquier clave que vaya a insertarse se coloca en una ranura disponible en el conjunto de conclusión y se establece según una antigüedad de entrada de cero. Una ranura disponible puede ser o bien una ranura que todavía no se ha asignado, o una ranura que se ha vuelto obsoleta (porque su antigüedad de entrada ha llegado a 255). Además, se reestablece a cero la antigüedad de entrada de cualquier entrada que se actualice.
En la realización anterior, la antigüedad de entrada se almacenó como un único byte. Esto da un rango de 254 periodos de tiempo en los que un tipo de datos puede volverse obsoleto. Es posible usar más de un byte dando unos límites de rango de antigüedad más amplios, pero con un aumento de la sobrecarga de almacenamiento. De manera alternativa, puede usarse menos de un byte como la antigüedad de entrada, reduciendo de ese modo la sobrecarga de almacenamiento, pero reduciendo también los límites de rango de antigüedad que pueden definirse individualmente.
Por tanto, es posible proporcionar una base de datos mejorada.
División del gráfico de decisión
Tal como se ha comentado en el presente documento anteriormente, es preferible que la totalidad del gráfico de decisión (índice) esté contenida dentro de la memoria de semiconductores puesto que esto permite un acceso rápido. Sin embargo, las capacidades de la plataforma de hardware que ejecuta la base de datos o el tamaño de la base de datos puede ser tal que no sea posible contener la totalidad del índice dentro de la memoria de semiconductores o el tiempo. Esto puede ser, por ejemplo, porque se espera que la máquina sea multitarea y que realice otras funciones.
Se conoce ampliamente que los dispositivos de almacenamiento masivo, tales como unidades de disco duro, se dividen en bloques de un tamaño predeterminado, ocupando un archivo de cualquier tamaño inferior al tamaño del bloque aún un bloque. Por tanto, la memoria física se usa en múltiplos del tamaño de bloque. Cuando se lee y se escribe el gráfico de decisión en una memoria de este tipo, es preferible que el gráfico de decisión se estructure de modo tal que la totalidad del mismo, o la mayor parte posible, se escriba en un bloque único. Por tanto, es probable que un gráfico de decisión resida dentro de un bloque de memoria. Sin embargo, a medida que el índice va llenándose, el gráfico de decisión crece a medida que lo hace la población de clave. Por lo tanto llega un momento en el que se vuelve imposible colocar el gráfico de decisión dentro de un bloque único. Por tanto se requieren métodos para colocar el gráfico de decisión a través de bloques múltiples.
En referencia a la figura 14, supóngase que el bloque 700 de memoria representa el tamaño físico de un bloque en el disco duro de un sistema informático, y que el bloque se subdivide para contener partes 702, 704, 706 y 708 individuales, entre otras, cada una de las cuales se refiere a los datos con respecto a un nodo asociado dentro del gráfico de decisión. Además, supóngase que el índice ha llegado ahora a un tamaño tal que el bloque 700 está completamente lleno.
Supóngase ahora que como resultado de una operación de inserción de una base de datos, se requiere insertar un nodo adicional en el gráfico de decisión. La inserción de nodo puede producirse en cualquier momento. Tal como se observó anteriormente en el presente documento, cada nodo de decisión (figura 3) comprende un valor de decisión, y un puntero bajo y un puntero alto que indica el siguiente nodo en el gráfico. Por lo tanto, pueden realizarse modificaciones locales en el gráfico de modo que pueda insertarse un nuevo nodo después de cualquier nodo existente. Por tanto, suponiendo que como resultado de una inserción, se requiere insertar un nuevo nodo después del nodo cuyos datos se representan mediante la unidad 706 de datos. En primer lugar, cuando se inserta el nuevo nodo uno de los punteros de salida del nodo 706 se modifica para apuntar al nuevo nodo. Como parte del proceso de inserción los punteros de salida del nuevo nodo también se configuran de manera correcta de modo que el gráfico de decisión no se rompa. Sin embargo, dado que ya no es posible almacenar los datos relativos al nuevo nodo, 710, en el bloque 700 de memoria, los detalles relativos al nuevo nodo 710 deben almacenarse en un bloque 712 adicional. También pueden crearse nodos adicionales relativos a ese nuevo nodo y almacenarse la información en el bloque 712 de memoria.
Si posteriormente, se requiere insertar un nuevo nodo relativo a un nodo existente anterior, 708, entonces el bloque 700 de memoria se llena de nuevo y por consiguiente los detalles de un nuevo nodo 714 adicional deben almacenarse fuera del bloque 700 de memoria. Este proceso permite que el gráfico de decisión que crezca, pero puede dar como resultado la generación de gran número de bloques de memoria casi vacíos a partir de cada bloque (padre) lleno.
La figura 15 ilustra un método alternativo para hacer crecer el índice. De nuevo, supóngase que el bloque 700 de memoria está lleno y que ahora se requiere insertar un nuevo nodo. Como anteriormente, se crea un nuevo bloque de gráfico de memoria. Pero ahora el gráfico de decisión padre se divide en partes iguales. Una parte se coloca en el bloque 700 antiguo mientras que la otra parte se coloca en el bloque 712 nuevo.
En referencia a la figura 15, supóngase inicialmente que el índice 720 se almacena dentro del bloque 700 de memoria y que el bloque 700 ahora está lleno. Supóngase que una inserción de índice dé como resultado la creación del nuevo nodo 722, y este proceso haga que el índice supere el tamaño del bloque 700 de memoria. Sin embargo, en este método de control del crecimiento del índice, la estructura de los índices se analiza para dividirla sustancialmente en partes iguales entre los bloques de índice. Por tanto, tomando la parte del índice mostrada en la figura 15, puede verse que empieza en el nodo 724; puede llegarse a diez nodos, rodeados por la línea 726 de raya y punto por el trayecto que se extiende hacia la izquierda del nodo 724, mientras que doce nodos rodeados por la línea 728 de raya y punto pueden encontrarse en el trayecto que se extiende hacia la derecha del nodo 724. Un algoritmo explora de manera recursiva la estructura del índice, seleccionando un nodo de prueba y calculando a continuación los nodos que dependen del mismo con el fin de encontrar un nodo candidato adecuado para dividir el índice. En el ejemplo mostrado en la figura 15, el nodo 724 y los nodos rodeados por la línea 726 se colocarían en el bloque 700 de memoria antiguo, mientras que los nodos rodeados por la línea 728 de raya y punto se colocarían en el nuevo bloque 712 de memoria. Este proceso garantiza que cada bloque de memoria se utiliza de manera óptima y equitativa y detiene la proliferación de bloques de memoria sustancialmente vacíos.
Calificadores
Con frecuencia, se desea que el término de búsqueda en el índice se realice usando dos o más criterios de búsqueda. Estos criterios se combinan, en general recurriendo a los principios del álgebra booleana.
Es posible dividir la consulta en partes individuales realizándose cada parte antes de que la siguiente haya terminado y entonces combinar los resultados al final. Esto, sin embargo, puede ser de gran intensidad en cuanto a cálculo y requiere muchas operaciones de lectura-escritura en un almacenamiento de datos de bloque, tal como un disco duro. Por tanto, por ejemplo, una consulta que devolvió 100 ocurrencias podría entonces requerir otras 100 operaciones de E/S de disco lentas con el fin de extraer el puntero de datos mediante la consulta de índice.
Puede que no se requieran todos los datos extraídos por la consulta. Por tanto, si se realizó una consulta de una base de datos para encontrar todos los coches Mercedes registrados en 1997, la consulta de coches registrados en 1997 devolvería varios miles de resultados. Sin embargo, sólo un pequeño número de estos eran Mercedes. Además, para muchas consultas puede que no sea posible cambiar el orden de la consulta con objeto de reducir el número de resultados no deseados.
Este problema puede superarse usando claves concatenadas. Sin embargo, hasta ahora tales claves concatenadas han mantenido la totalidad tanto de las claves de búsqueda principales como de las claves de búsqueda secundarias en la clave concatenada combinada y por consiguiente la clave combinada se vuelve particularmente larga.
El solicitante se ha dado cuenta de que la mejora del rendimiento de búsqueda puede realizarse asociando calificadores, y en particular añadiendo calificadores, a la clave de búsqueda principal. El calificador no representa directamente el término de búsqueda segundo o posterior, sino que en su lugar es una forma abreviada de ese término posterior. En la presente invención, el calificador se genera realizando una función hashing sobre el o cada término de búsqueda posterior. La misma función hashing se usa para consultar una base de datos tal como se usa para insertar o borrar datos de la misma. Por tanto, durante la creación de la base de datos, el índice se crea con una clave principal (como anteriormente) y con cero o más claves de calificador.
En uso, se navega por el índice usando la clave principal y los datos se almacenan en los conjuntos de conclusión de la manera habitual. Sin embargo, cada clave de calificador se codifica por hash hasta un único byte, que es un número en el rango de cero a 255, y se almacena junto con la entrada de clave en el conjunto de conclusión.
Durante una consulta, se suministran cero o más claves de calificador a la clave principal. Se navega entonces por el índice usando la clave principal, como anteriormente. Por último, una vez que se llega al conjunto o conjuntos de conclusión correctos, estos se exploran entonces haciendo coincidir el valor de clave principal y los códigos hash de clave de calificador con las entradas en el conjunto de conclusión. Sólo se devuelven las entradas que coinciden con la totalidad de la clave principal y con la totalidad de los códigos hash de calificador.
Debe observarse que pueden mapearse múltiples claves de calificador con el mismo código hash de único byte. Hay por lo tanto una pequeña aunque limitada probabilidad de que se devuelvan datos no deseados. Sin embargo, suponiendo que se usa una buena codificación hash de aleatorización, la probabilidad de una coincidencia errónea es una de 255 (o menor que el 0,5%) puede verse que la presente invención garantiza devolver todos los resultados correctos, aunque con un pequeño porcentaje también de resultados incorrectos. Por tanto, todas las ocurrencias de clave devueltas deben inspeccionarse entonces en un almacenamiento de datos para eliminar cualquiera de las entradas no deseadas. Sin embargo, la reducción en tamaño del índice y la simplificación del proceso de consulta compensa con creces el análisis adicional de las ocurrencias devueltas. Esta ventaja aumenta a medida que se usan más calificadores dado que la probabilidad de una ocurrencia incorrecta disminuye con el aumento del número de calificadores. La probabilidad de un resultado malo es, en circunstancias ideales, (1/255)^{N}. Por tanto, con dos calificadores (N=2) la probabilidad de un resultado malo es 1 de 65025 o menor del 0,002%. Con tres calificadores, la probabilidad de devolver un ítem de datos incorrecto se reduce aproximadamente a 14 millones a 1.
Se vería que, el tamaño de la clave de búsqueda, y los requisitos de almacenamiento de datos dentro de los conjuntos de conclusión, se reduce en gran medida. Por tanto, si se hubiera pretendido buscar en 8 términos, cada uno de los cuales podría tener una longitud de hasta 8 bytes, esto normalmente requeriría un almacenamiento de 64 bytes de datos para cada clave de búsqueda. En la presente invención, este requisito se reduce meramente a 15 bytes de datos.
Cuando se consulta la base de datos, cada clave de calificador es opcional y ninguna, cualquiera o todas las claves pueden suministrarse debido a que no afectan a la navegación por la estructura del índice. Las claves de calificador sólo afectan al número de ocurrencias que se devuelven cuando se exploran los conjuntos de conclusión. Por tanto, cuantos más calificadores se suministren más preciso será el resultado de consulta.
Debe observarse que esta técnica de calificadores puede aplicarse a cualquier estructura de índice, por ejemplo, estructuras ampliamente conocidas tal como la de árbol-B. La figura 16 ilustra de manera esquemática el formato de clave de búsqueda según este aspecto de la presente invención en el que una primera parte de la clave contiene los datos de clave principal, y entonces el resto de la clave comprende los calificadores Q1, Q2, etc. hasta Q7, siendo cada uno de los cuales un palabra de 1 byte de longitud producida por una función hashing sobre las claves adicionales originales.

Claims (40)

1. Método para organizar una base de datos que en uso comprende un índice (2) y datos (16), en el que el índice (2) se consulta usando una clave de búsqueda que comprende al menos un símbolo, estando representado el símbolo por una pluralidad de bits, con el fin de localizar datos que coinciden con un criterio de búsqueda, en el que el índice es una estructura jerárquica de nodos por la que se navega durante una búsqueda hasta llegar a un conjunto (6-14) de conclusión, se realiza una búsqueda en el índice comparando un grupo de decisión de la clave de búsqueda en cada nodo con un valor de decisión del nodo, comprendiendo cada grupo de decisión al menos un bit y comprendiendo al menos algunos de los grupos de decisión una pluralidad de bits, y la estructura está organizada de modo que no se almacenan símbolos de clave en un nodo en la estructura, caracterizado porque cada nodo tiene menos de tres trayectos de salida desde el mismo, y porque el número de bits en el grupo de decisión puede establecerse para que incluya cualquier número de bits entre un único bit y todos los bits de la clave.
2. Método según la reivindicación 1, caracterizado porque los nodos no almacenan la totalidad de la clave asociada con el nodo.
3. Método según la reivindicación 1 ó 2, en el que los nodos no almacenan las reglas de decisión relativas a la interrogación del nodo.
4. Método según una cualquiera de las reivindicaciones anteriores, en el que la decisión en cada nodo es una consulta simple.
5. Método según la reivindicación 4, en el que, en un nodo, la clave o parte de la clave que se usa para una consulta se compara con el criterio de decisión en el nodo, y la prueba aplicada es si la clave o parte de la misma es mayor o menor que el criterio de decisión.
6. Método según una cualquiera de las reivindicaciones anteriores, en el que cada registro en la base de datos pertenece a un conjunto de conclusión.
7. Método según una cualquiera de las reivindicaciones anteriores, en el que, en uso, la estructura jerárquica de nodos de decisión forma un gráfico de decisión contenido dentro de la memoria electrónica de un procesador de
datos.
8. Método según la reivindicación 6, en el que cada conjunto de conclusión tiene un tamaño máximo.
9. Método según la reivindicación 8, en el que el tamaño de un conjunto de conclusión es el mismo que o es un múltiplo del tamaño de un bloque de datos o de dirección usado en un dispositivo de almacenamiento de datos.
10. Método según la reivindicación 8, en el que a medida que un conjunto de conclusión se aproxima a un tamaño predeterminado, un nuevo nodo de decisión se inserta en la estructura jerárquica de nodos y los datos que estaban en el conjunto de conclusión se reindexan en nuevos conjuntos de conclusión a los que se llega a través de las trayectos de salida del nuevo nodo de decisión.
11. Método según la reivindicación 10, en el que el nuevo nodo de decisión se inserta en el trayecto de salida desde un nodo que apuntaba al conjunto de conclusión que llegó al tamaño predeterminado.
12. Método según una cualquiera de las reivindicaciones anteriores, en el que la reorganización estructural de la base de datos sólo afecta a uno o dos nodos de decisión a la vez.
13. Método según una cualquiera de las reivindicaciones anteriores, en el que los nodos de decisión están relacionados con partes de la clave de búsqueda.
14. Método según la reivindicación 13, en el que el gráfico de decisión es en gran parte independiente de la estructura de la clave.
15. Método según una cualquiera de las reivindicaciones anteriores, en el que la estructura jerárquica de nodos está estructurada de modo que se conserva un orden semántico de secuencias de clave.
16. Método según la reivindicación 6, en el que cada entrada en el conjunto de conclusión comprende un campo de enlace que apunta al siguiente ítem en el conjunto de conclusión, conteniendo un campo de claves el valor exacto de una clave asociada con la entrada en el conjunto de conclusión y un campo de propiedades que contiene uno de los datos correspondientes a la clave o un puntero que apunta a los datos correspondientes a la clave.
17. Método según una cualquiera de las reivindicaciones anteriores, en el que cada nodo tiene un valor de decisión asociado que se compara, en uso, con un grupo de bits de decisión en una clave, y el resultado de la comparación se usa para seleccionar un trayecto de salida desde el nodo.
18. Método según una cualquiera de las reivindicaciones anteriores, en el que el valor de decisión se selecciona a partir de uno de:
la mediana matemática de todos los valores posibles de los grupos de decisión;
la mediana matemática de todos los valores esperados de grupos de decisión;
el promedio matemático de todos los valores esperados del grupo de decisión;
un valor predeterminado seleccionado en la creación del índice; y
un valor seleccionado en función del valor de decisión usado más recientemente y el valor de decisión que precede a ese.
19. Método según una cualquiera de las reivindicaciones anteriores, en el que la selección de un grupo de decisión en un nodo de decisión visitado se selecciona a partir de uno de:
un grupo de decisión que es el mismo para todos los nodos;
un grupo de decisión que cambia en cada visita a un nodo de decisión;
un grupo de decisión que cambia cuando un valor de decisión en un nodo precedente llega a un máximo de rango de decisión o un mínimo de rango de decisión del grupo de decisión actual; y
un grupo de decisión que se cambia cuando el valor de decisión entre nodos sucesivos cambiaría por menos de un umbral predeterminado.
20. Método según una cualquiera de las reivindicaciones anteriores, en el que, cuando se añaden datos, se navega por el índice hasta llegar a un conjunto de conclusión, o se identifica la necesidad de crear un conjunto de conclusión, y los datos se añaden entonces al conjunto de conclusión.
21. Método según una cualquiera de las reivindicaciones anteriores, en el que claves almacenadas dentro de conjuntos de conclusión incluyen un campo de datos que indica la duración para la que la clave y sus datos deberían mantenerse dentro de la base de datos.
22. Método según la reivindicación 21, en el que se hacen disponibles claves y datos que han expirado para sobreescribirse con datos nuevos.
23. Método según la reivindicación 21 ó 22, en el que claves y datos que han expirado no se borran de manera activa de la base de datos.
24. Método según la reivindicación 21, 22 ó 23, en el que cuando se accede a un conjunto de conclusión, se calcula la antigüedad de cada entrada que tiene una duración y los resultados del cálculo pueden almacenarse o usarse para determinar qué entradas pueden sobrescribirse.
25. Método según una cualquiera de las reivindicaciones anteriores, en el que la base de datos comprende un índice de clave y un índice de decisión, en el que las claves en el índice de clave se almacenan de una manera comprimida, y en el que se realiza una comprobación del índice de clave para ver si la clave existe antes de interrogar el índice de decisión usando la clave.
26. Método según la reivindicación 25, en el que no se realiza una búsqueda en el índice de decisión si la clave no existe en el índice de clave.
27. Método según la reivindicación 25 ó 26, en el que, durante una operación para insertar una clave, se realiza una comprobación del índice de clave y la clave se rechaza como duplicada si se encuentra una entrada de coincidencia.
28. Método según una cualquiera de las reivindicaciones 25 a 27, en el que las claves en el índice de clave se almacenan de una manera comprimida, codificada o mapeada.
29. Método según la reivindicación 28, en el que las claves se mapean usando una función hash.
30. Método según una cualquiera de las reivindicaciones 25 a 29, en el que el índice de clave comprende una disposición de elementos, siendo el número de elementos en la disposición al menos igual de grande que el número de elementos de clave única dentro del índice.
31. Método según la reivindicación 30, en el que se usan dos funciones disímiles, en el que se usa una función hash como parte de un proceso para calcular un elemento E(K) de destino dentro del índice de clave y la otra función hash se usa para codificar la clave y el resultado B(K) se almacena en el elemento de destino.
32. Método según la reivindicación 31, en el que durante una consulta del índice de clave, se calcula el elemento de destino para una clave objetivo, y se calcula el valor codificado que usa la segunda función hash para la clave objetivo, y la clave se considera duplicada si el valor codificado coincide con un valor preexistente en el elemento de destino.
33. Método según una cualquiera de las reivindicaciones anteriores, en el que el índice comprende una estructura jerárquica de índices de modo que un índice puede delegar parte de su carga de trabajo a al menos otro índice.
34. Método según la reivindicación 33, en el que un índice al que se ha delegado trabajo puede delegar trabajo a otros índices.
35. Método según la reivindicación 33 ó 34, en el que se define un manifiesto de clave de un índice mediante un rango y el índice rechaza cualquier petición de operar en una clave fuera del rango.
36. Método según la reivindicación 35, en el que, si la clave está dentro del rango de índices de la base de datos, la base de datos puede realizar una operación sobre la propia clave o delegar la tarea si la clave está dentro del rango de manifiesto de cualquiera de los índices de delegación.
37. Método según una cualquiera de las reivindicaciones 33 a 36, en el que cada índice se asocia con un dispositivo de almacenamiento físico, permitiendo de este modo que se produzcan múltiples accesos de disco concurrentes.
38. Instrucciones legibles por ordenador para hacer que un ordenador realice el método según una cualquiera de las reivindicaciones 1 a 37.
39. Instrucciones legibles por ordenador según la reivindicación 38, en las que las instrucciones se llevan sobre una portadora de datos.
40. Base de datos que en uso comprende un índice (2) y datos (16), en la que el índice (2) se consulta usando una clave de búsqueda que comprende al menos un símbolo, estando representado el símbolo por una pluralidad de bits, con el fin de localizar datos que coinciden con un criterio de búsqueda, y en la que el índice es una estructura jerárquica de nodos por la que se navega durante una búsqueda hasta llegar a un conjunto (6-14) de conclusión, en la que se realiza una búsqueda en el índice (2) comparando un grupo de decisión de la clave de búsqueda en cada nodo con un valor de decisión del nodo, comprendiendo cada grupo de decisión al menos un bit y comprendiendo al menos algunos de los grupos de decisión una pluralidad de bits, y en la que la estructura está organizada de modo que no se almacenan símbolos de clave en un nodo en la estructura, caracterizada porque cada nodo tiene menos de tres trayectos de salida desde el mismo, y porque el número de bits en el grupo de decisión puede establecerse para que incluya cualquier número de bits entre un único bit y todos los bits de la clave.
ES01998908T 2000-11-30 2001-11-28 Base de datos. Expired - Lifetime ES2329339T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB0029238A GB2369695B (en) 2000-11-30 2000-11-30 Database
GB0029238 2000-11-30

Publications (1)

Publication Number Publication Date
ES2329339T3 true ES2329339T3 (es) 2009-11-25

Family

ID=9904192

Family Applications (1)

Application Number Title Priority Date Filing Date
ES01998908T Expired - Lifetime ES2329339T3 (es) 2000-11-30 2001-11-28 Base de datos.

Country Status (22)

Country Link
US (1) US8224829B2 (es)
EP (3) EP2270680A3 (es)
JP (3) JP4810785B2 (es)
KR (2) KR100886189B1 (es)
CN (2) CN1822003A (es)
AR (1) AR035508A1 (es)
AT (1) ATE436055T1 (es)
AU (4) AU2209602A (es)
CA (1) CA2429990A1 (es)
CY (1) CY1109459T1 (es)
DE (1) DE60139212D1 (es)
DK (1) DK1364314T3 (es)
EA (4) EA006562B1 (es)
EG (1) EG23400A (es)
ES (1) ES2329339T3 (es)
GB (6) GB2406679B (es)
IL (3) IL156117A0 (es)
MY (2) MY142616A (es)
NO (2) NO20032416L (es)
NZ (3) NZ543307A (es)
SG (1) SG148842A1 (es)
WO (1) WO2002044940A2 (es)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023148411A1 (es) * 2022-02-04 2023-08-10 Navarro Arteaga Angel Procedimiento de calibración de gráficos

Families Citing this family (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8352400B2 (en) 1991-12-23 2013-01-08 Hoffberg Steven M Adaptive pattern recognition based controller apparatus and method and human-factored interface therefore
US7966078B2 (en) 1999-02-01 2011-06-21 Steven Hoffberg Network media appliance system and method
GB2383153A (en) * 2001-12-17 2003-06-18 Hemera Technologies Inc Search engine for computer graphic images
US7072904B2 (en) 2002-12-02 2006-07-04 Microsoft Corporation Deletion and compaction using versioned nodes
US7007027B2 (en) * 2002-12-02 2006-02-28 Microsoft Corporation Algorithm for tree traversals using left links
GB0304782D0 (en) * 2003-03-03 2003-04-09 Percy Richard System and method using alphanumeric codes for the identification, description, classification and encoding of information
US20050144241A1 (en) 2003-10-17 2005-06-30 Stata Raymond P. Systems and methods for a search-based email client
US7620624B2 (en) * 2003-10-17 2009-11-17 Yahoo! Inc. Systems and methods for indexing content for fast and scalable retrieval
US7849063B2 (en) * 2003-10-17 2010-12-07 Yahoo! Inc. Systems and methods for indexing content for fast and scalable retrieval
US20050183120A1 (en) * 2004-01-13 2005-08-18 Saurabh Jain Multi-user personalized digital multimedia distribution methods and systems
US8316060B1 (en) 2005-01-26 2012-11-20 21st Century Technologies Segment matching search system and method
US8515983B1 (en) * 2005-10-28 2013-08-20 21st Century Technologies Segment matching search system and method
US7567968B2 (en) * 2005-01-31 2009-07-28 Microsoft Corporation Integration of a non-relational query language with a relational data store
US7565217B2 (en) * 2005-04-01 2009-07-21 International Business Machines Corporation Traversal of empty regions in a searchable data structure
US8412528B2 (en) * 2005-06-21 2013-04-02 Nuance Communications, Inc. Back-end database reorganization for application-specific concatenative text-to-speech systems
JP4810915B2 (ja) * 2005-07-28 2011-11-09 日本電気株式会社 データ検索装置及び方法、並びにコンピュータ・プログラム
US7792368B2 (en) * 2005-08-10 2010-09-07 Xerox Corporation Monotonic classifier
US8768777B2 (en) * 2005-08-31 2014-07-01 Sap Ag Tracking assets between organizations in a consortium of organizations
US8478755B2 (en) * 2006-04-20 2013-07-02 Microsoft Corporation Sorting large data sets
US8229902B2 (en) * 2006-11-01 2012-07-24 Ab Initio Technology Llc Managing storage of individually accessible data units
GB2445764A (en) * 2007-01-22 2008-07-23 Surfcontrol Plc Resource access filtering system and database structure for use therewith
GB2452760A (en) 2007-09-14 2009-03-18 Data Connection Ltd Storing and searching data in a database tree structure for use in data packet routing applications.
WO2009148473A1 (en) * 2007-12-12 2009-12-10 21Ct, Inc. Method and system for abstracting information for use in link analysis
CN101918921B (zh) * 2008-01-27 2013-12-04 思杰系统有限公司 用于远程提供三维图形的方法和系统
JP5220483B2 (ja) * 2008-06-06 2013-06-26 インターナショナル・ビジネス・マシーンズ・コーポレーション 木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム
CN101295312B (zh) * 2008-06-18 2011-12-28 中兴通讯股份有限公司 一种使用表格呈现数据的方法
US8055646B2 (en) * 2008-08-05 2011-11-08 International Business Machines Corporation Prevention of redundant indexes in a database management system
US8095548B2 (en) 2008-10-14 2012-01-10 Saudi Arabian Oil Company Methods, program product, and system of data management having container approximation indexing
US9047330B2 (en) * 2008-10-27 2015-06-02 Ianywhere Solutions, Inc. Index compression in databases
US20100257181A1 (en) * 2009-04-01 2010-10-07 Sybase, Inc. Dynamic Hash Table for Efficient Data Access In A Relational Database System
US8306958B2 (en) * 2009-09-14 2012-11-06 At&T Intellectual Property I, L.P. Time-outs with time-reversed linear probing
US20110093439A1 (en) * 2009-10-16 2011-04-21 Fanglu Guo De-duplication Storage System with Multiple Indices for Efficient File Storage
DE102009054753A1 (de) * 2009-12-16 2011-06-22 Robert Bosch GmbH, 70469 Verfahren zum Betreiben einer Sicherheitseinrichtung
RU2613034C2 (ru) * 2010-11-16 2017-03-14 Тибко Софтвеар Инк. Быстрое установление соответствия при адресации по содержанию (контенту)
CN102087666B (zh) * 2011-01-30 2012-10-31 华东师范大学 一种基于节点与关键字覆盖关系的索引及其构建方法和查询方法
EP2490134A1 (en) * 2011-02-18 2012-08-22 Amadeus S.A.S. Method, system and computer program to provide fares detection from rules attributes
US20120265784A1 (en) * 2011-04-15 2012-10-18 Microsoft Corporation Ordering semantic query formulation suggestions
US8788505B2 (en) 2011-04-27 2014-07-22 Verisign, Inc Systems and methods for a cache-sensitive index using partial keys
US8799240B2 (en) * 2011-06-23 2014-08-05 Palantir Technologies, Inc. System and method for investigating large amounts of data
US8676951B2 (en) * 2011-07-27 2014-03-18 Hitachi, Ltd. Traffic reduction method for distributed key-value store
US8965921B2 (en) * 2012-06-06 2015-02-24 Rackspace Us, Inc. Data management and indexing across a distributed database
WO2014078681A1 (en) * 2012-11-16 2014-05-22 Dahn David W Computer-implemented decision tracking systems, displays and methods
KR101441869B1 (ko) * 2013-02-21 2014-09-22 고려대학교 산학협력단 단축 url 생성 시스템 및 그 방법
EP3182304A1 (en) 2013-03-29 2017-06-21 Pilab S.A. Computer-implemented method for storing unlimited amount of data as a mind map in relational database systems
EP3159815A1 (en) 2013-06-30 2017-04-26 Pilab S.A. Database hierarchy-independent data drilling
EP2843568A1 (en) 2013-08-30 2015-03-04 Pilab S.A. Computer implemented method for creating database structures without knowledge on functioning of relational database system
EP2843567B1 (en) * 2013-08-30 2017-05-10 Pilab S.A. Computer-implemented method for improving query execution in relational databases normalized at level 4 and above
US10061792B2 (en) * 2013-12-31 2018-08-28 Sybase, Inc. Tiered index management
US9400817B2 (en) 2013-12-31 2016-07-26 Sybase, Inc. In-place index repair
US9450602B2 (en) 2014-01-02 2016-09-20 Sap Se Efficiently query compressed time-series data in a database
US9667704B1 (en) 2014-04-26 2017-05-30 Google Inc. System and method for classifying API requests in API processing systems using a tree configuration
CN105404437B (zh) * 2014-08-05 2019-07-26 阿里巴巴集团控股有限公司 一种信息操作的方法及装置
CN104268146A (zh) * 2014-08-21 2015-01-07 南京邮电大学 一种适合分析型应用的静态b+树索引方法
CN104182522B (zh) * 2014-08-26 2017-04-19 中国科学院信息工程研究所 一种基于循环位图模型的辅助索引方法及装置
US20160063051A1 (en) * 2014-08-29 2016-03-03 Netapp, Inc. Methods for persisting data on nonvolatile memory for fast updates and instantaneous recovery and devices thereof
DE102014112741A1 (de) 2014-09-04 2016-03-10 Dr. Ing. H.C. F. Porsche Aktiengesellschaft Kraftfahrzeug
US9836695B2 (en) * 2015-03-24 2017-12-05 International Business Machines Corporation Automated decision support provenance and simulation
CN106294371B (zh) 2015-05-15 2019-08-16 阿里巴巴集团控股有限公司 字符串值域切分方法及装置
JP6241449B2 (ja) * 2015-05-21 2017-12-06 横河電機株式会社 データ管理システム及びデータ管理方法
US10846275B2 (en) 2015-06-26 2020-11-24 Pure Storage, Inc. Key management in a storage device
US9703789B2 (en) * 2015-07-27 2017-07-11 Sas Institute Inc. Distributed data set storage and retrieval
US9946719B2 (en) 2015-07-27 2018-04-17 Sas Institute Inc. Distributed data set encryption and decryption
WO2017186774A1 (en) 2016-04-26 2017-11-02 Pilab S.A. Systems and methods for querying databases
SG11201811425TA (en) * 2016-09-22 2019-01-30 Visa Int Service Ass Techniques for in-memory key range searches
JP2018206084A (ja) * 2017-06-05 2018-12-27 株式会社東芝 データベース管理システムおよびデータベース管理方法
CN110427340B (zh) * 2018-04-28 2023-08-04 伊姆西Ip控股有限责任公司 用于文件存储的方法、装置和计算机存储介质
US11216432B2 (en) 2018-07-06 2022-01-04 Cfph, Llc Index data structures and graphical user interface
US10423662B1 (en) * 2019-05-24 2019-09-24 Hydrolix Inc. Efficient and scalable time-series data storage and retrieval over a network
US11263195B2 (en) * 2020-05-11 2022-03-01 Servicenow, Inc. Text-based search of tree-structured tables
US11960483B1 (en) 2021-09-16 2024-04-16 Wells Fargo Bank, N.A. Constant time data structure for single and distributed networks
US11803545B1 (en) * 2022-06-24 2023-10-31 Sap Se Runtime statistics feedback for query plan cost estimation

Family Cites Families (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3593309A (en) * 1969-01-03 1971-07-13 Ibm Method and means for generating compressed keys
JPH0772898B2 (ja) * 1981-06-27 1995-08-02 富士通株式会社 インデックスの作成方式
JPS607557A (ja) * 1983-06-27 1985-01-16 Fujitsu Ltd 文字型デ−タの区分化圧縮法
US5010478A (en) * 1986-04-11 1991-04-23 Deran Roger L Entity-attribute value database system with inverse attribute for selectively relating two different entities
JPS63285629A (ja) 1987-05-19 1988-11-22 Fujitsu Ltd インデックス構成処理方法
US5121495A (en) * 1988-02-02 1992-06-09 Bell Communications Research, Inc. Methods and apparatus for information storage and retrieval utilizing hashing techniques
JPH038083A (ja) 1989-06-06 1991-01-16 Fujitsu Ltd 識別子付情報の木構造管理方式
US5117349A (en) * 1990-03-27 1992-05-26 Sun Microsystems, Inc. User extensible, language sensitive database system
US5230047A (en) * 1990-04-16 1993-07-20 International Business Machines Corporation Method for balancing of distributed tree file structures in parallel computing systems to enable recovery after a failure
DE69131941T2 (de) 1990-10-05 2000-06-08 Microsoft Corp System und verfahren für informationsauffindung
JPH05120339A (ja) 1991-05-24 1993-05-18 Nec Ic Microcomput Syst Ltd 二分木構造データ登録処理方法
US5355473A (en) * 1991-06-20 1994-10-11 Lawrence Au Indexed record locating and counting mechanism
JPH05334153A (ja) 1992-06-01 1993-12-17 Nippon Telegr & Teleph Corp <Ntt> インデックス管理方式
US5689699A (en) * 1992-12-23 1997-11-18 International Business Machines Corporation Dynamic verification of authorization in retention management schemes for data processing systems
JP2583010B2 (ja) * 1993-01-07 1997-02-19 インターナショナル・ビジネス・マシーンズ・コーポレイション 多層インデックス構造におけるローカルインデックステーブル及び大域インデックステーブルの間の一貫性を維持する方法
US5497485A (en) * 1993-05-21 1996-03-05 Amalgamated Software Of North America, Inc. Method and apparatus for implementing Q-trees
US5560007A (en) * 1993-06-30 1996-09-24 Borland International, Inc. B-tree key-range bit map index optimization of database queries
JP2683870B2 (ja) * 1994-05-23 1997-12-03 日本アイ・ビー・エム株式会社 文字列検索システム及び方法
JPH07319924A (ja) * 1994-05-24 1995-12-08 Matsushita Electric Ind Co Ltd 手書き電子文書のインデックス付けおよび探索方法
US5619199A (en) * 1995-05-04 1997-04-08 International Business Machines Corporation Order preserving run length encoding with compression codeword extraction for comparisons
JPH08314957A (ja) * 1995-05-18 1996-11-29 Mitsubishi Electric Corp データベースシステム
JPH08320648A (ja) * 1995-05-24 1996-12-03 Matsushita Electric Ind Co Ltd ナビゲーション装置
US5664179A (en) * 1995-06-27 1997-09-02 Mci Corporation Modified skip list database structure and method for access
JPH0936747A (ja) 1995-07-18 1997-02-07 Toshiba Corp データ圧縮方法及びデータ圧縮装置
US6427147B1 (en) * 1995-12-01 2002-07-30 Sand Technology Systems International Deletion of ordered sets of keys in a compact O-complete tree
US5819286A (en) * 1995-12-11 1998-10-06 Industrial Technology Research Institute Video database indexing and query method and system
US5806065A (en) * 1996-05-06 1998-09-08 Microsoft Corporation Data system with distributed tree indexes and method for maintaining the indexes
US5768581A (en) * 1996-05-07 1998-06-16 Cochran; Nancy Pauline Apparatus and method for selecting records from a computer database by repeatedly displaying search terms from multiple list identifiers before either a list identifier or a search term is selected
US5706495A (en) * 1996-05-07 1998-01-06 International Business Machines Corporation Encoded-vector indices for decision support and warehousing
IL118959A (en) * 1996-07-26 1999-07-14 Ori Software Dev Ltd Database apparatus
JPH1040255A (ja) 1996-07-29 1998-02-13 Nec Software Ltd ハッシュ表管理装置
US5899992A (en) * 1997-02-14 1999-05-04 International Business Machines Corporation Scalable set oriented classifier
US5926820A (en) * 1997-02-27 1999-07-20 International Business Machines Corporation Method and system for performing range max/min queries on a data cube
US5898760A (en) * 1997-03-05 1999-04-27 Bellsouth Corporation Method and apparatus for automating the management of a database
US6115716A (en) * 1997-03-14 2000-09-05 Nokia Telecommunications Oy Method for implementing an associative memory based on a digital trie structure
JP3087694B2 (ja) * 1997-07-15 2000-09-11 日本電気株式会社 情報検索装置及びプログラムを記録した機械読み取り可能な記録媒体
SE510000C2 (sv) * 1997-07-21 1999-03-29 Ericsson Telefon Ab L M Struktur vid databas
US6041053A (en) * 1997-09-18 2000-03-21 Microsfot Corporation Technique for efficiently classifying packets using a trie-indexed hierarchy forest that accommodates wildcards
TR200002119T2 (tr) * 1998-01-22 2000-12-21 Ori Software Development Ltd. Veri tabanı cihazı.
JP3849279B2 (ja) * 1998-01-23 2006-11-22 富士ゼロックス株式会社 インデクス作成方法および検索方法
US6047283A (en) * 1998-02-26 2000-04-04 Sap Aktiengesellschaft Fast string searching and indexing using a search tree having a plurality of linked nodes
JP2000076106A (ja) 1998-08-31 2000-03-14 Nec Eng Ltd 索引順編成ファイルの管理方法
US6370518B1 (en) * 1998-10-05 2002-04-09 Openwave Systems Inc. Method and apparatus for displaying a record from a structured database with minimum keystrokes
US6345266B1 (en) * 1998-12-23 2002-02-05 Novell, Inc. Predicate indexing for locating objects in a distributed directory
JP2000201080A (ja) * 1999-01-07 2000-07-18 Fujitsu Ltd 付加コ―ドを用いたデ―タ圧縮/復元装置および方法
TW460812B (en) * 1999-03-31 2001-10-21 Ibm Automated file pruning
US6662180B1 (en) * 1999-05-12 2003-12-09 Matsushita Electric Industrial Co., Ltd. Method for searching in large databases of automatically recognized text
US6421664B1 (en) * 1999-06-16 2002-07-16 International Business Machines Corporation Apparatus, program product and method for estimating the number of keys within an index key range
US6356888B1 (en) * 1999-06-18 2002-03-12 International Business Machines Corporation Utilize encoded vector indexes for distinct processing
US6681218B1 (en) * 1999-11-04 2004-01-20 International Business Machines Corporation System for managing RDBM fragmentations
US7043641B1 (en) * 2000-03-08 2006-05-09 Igt Encryption in a secure computerized gaming system
EP1158431A3 (en) * 2000-05-22 2006-05-17 Broadcom Corporation Method and apparatus for performing a binary search on an expanded tree
US6938046B2 (en) * 2001-03-02 2005-08-30 Dow Jones Reuters Business Interactive, Llp Polyarchical data indexing and automatically generated hierarchical data indexing paths

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023148411A1 (es) * 2022-02-04 2023-08-10 Navarro Arteaga Angel Procedimiento de calibración de gráficos

Also Published As

Publication number Publication date
GB2369695A (en) 2002-06-05
AR035508A1 (es) 2004-06-02
AU2002222096B2 (en) 2008-08-28
EG23400A (en) 2005-05-31
AU2011202009A1 (en) 2011-05-26
EP1364314B1 (en) 2009-07-08
GB2406680A (en) 2005-04-06
GB2407417A (en) 2005-04-27
EP2009559A1 (en) 2008-12-31
GB2406678B (en) 2005-05-18
GB2406681A (en) 2005-04-06
GB2369695B (en) 2005-03-16
GB0427859D0 (en) 2005-01-19
WO2002044940A8 (en) 2004-03-11
EP2270680A2 (en) 2011-01-05
MY132130A (en) 2007-09-28
GB2406680B (en) 2005-05-18
IL202125A (en) 2011-11-30
EA006640B1 (ru) 2006-02-24
MY142616A (en) 2010-12-15
NZ554641A (en) 2008-10-31
EA006562B1 (ru) 2006-02-24
IL156117A (en) 2010-06-16
GB0427860D0 (en) 2005-01-19
JP2009080833A (ja) 2009-04-16
EA007209B1 (ru) 2006-08-25
WO2002044940A3 (en) 2003-09-12
JP2004527813A (ja) 2004-09-09
KR100886189B1 (ko) 2009-02-27
EA200500008A1 (ru) 2005-10-27
AU2209602A (en) 2002-06-11
CY1109459T1 (el) 2012-05-23
AU2008249232B2 (en) 2011-02-03
ATE436055T1 (de) 2009-07-15
CN1552032B (zh) 2010-04-28
DK1364314T3 (da) 2009-11-09
JP4810785B2 (ja) 2011-11-09
NZ526102A (en) 2007-01-26
GB2407417B (en) 2005-06-29
EA200500009A1 (ru) 2005-10-27
KR20080024237A (ko) 2008-03-17
KR20040036681A (ko) 2004-04-30
EA200300522A1 (ru) 2004-06-24
NO332645B1 (no) 2012-11-26
GB0029238D0 (en) 2001-01-17
EA200500010A1 (ru) 2005-08-25
US8224829B2 (en) 2012-07-17
GB0427854D0 (en) 2005-01-19
CN1552032A (zh) 2004-12-01
GB2406678A (en) 2005-04-06
CN1822003A (zh) 2006-08-23
CA2429990A1 (en) 2002-06-06
SG148842A1 (en) 2009-01-29
EA005641B1 (ru) 2005-04-28
GB2406679A (en) 2005-04-06
NZ543307A (en) 2007-06-29
IL156117A0 (en) 2003-12-23
US20040015478A1 (en) 2004-01-22
GB0427862D0 (en) 2005-01-19
GB0427855D0 (en) 2005-01-19
EP2270680A3 (en) 2011-01-19
EP1364314A2 (en) 2003-11-26
JP2008071362A (ja) 2008-03-27
NO20051945L (no) 2003-07-23
WO2002044940A2 (en) 2002-06-06
JP4267046B2 (ja) 2009-05-27
NO20032416D0 (no) 2003-05-27
NO20032416L (no) 2003-07-23
GB2406679B (en) 2005-05-18
DE60139212D1 (de) 2009-08-20
AU2008249232A1 (en) 2008-12-18
GB2406681B (en) 2005-05-18

Similar Documents

Publication Publication Date Title
ES2329339T3 (es) Base de datos.
AU2002222096A1 (en) Method of organising, interrogating and navigating a database
US8356021B2 (en) Method and apparatus for indexing in a reduced-redundancy storage system
CN105117415B (zh) 一种优化的ssd数据更新方法
EP1866775B1 (en) Method for indexing in a reduced-redundancy storage system
JP2002540502A (ja) データベースシステムにおけるバーチャルメモリマッピングとトランザクションマネージメントのポインターリロケーションオプチミゼーションの方法及び装置
US20030005233A1 (en) Dual organization of cache contents
Li et al. Phast: Hierarchical concurrent log-free skip list for persistent memory
Halachev et al. Exact match search in sequence data using suffix trees
Fan Enhanced Suffix Trees for Very Large DNA Sequences
JP2005215869A (ja) データ格納検索システム
Bamford et al. Non-serial File Access
Smith Underlying Structures