ES2329339T3 - Base de datos. - Google Patents
Base de datos. Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management 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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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)
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)
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)
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 |
-
2000
- 2000-11-30 GB GB0427855A patent/GB2406679B/en not_active Expired - Fee Related
- 2000-11-30 GB GB0029238A patent/GB2369695B/en not_active Expired - Fee Related
- 2000-11-30 GB GB0427859A patent/GB2406680B/en not_active Expired - Fee Related
- 2000-11-30 GB GB0427854A patent/GB2406678B/en not_active Expired - Fee Related
- 2000-11-30 GB GB0427862A patent/GB2406681B/en not_active Expired - Fee Related
- 2000-11-30 GB GB0427860A patent/GB2407417B/en not_active Expired - Fee Related
-
2001
- 2001-11-28 JP JP2002547038A patent/JP4810785B2/ja not_active Expired - Fee Related
- 2001-11-28 EP EP10181189A patent/EP2270680A3/en not_active Withdrawn
- 2001-11-28 KR KR1020037007328A patent/KR100886189B1/ko not_active IP Right Cessation
- 2001-11-28 EA EA200500009A patent/EA006562B1/ru not_active IP Right Cessation
- 2001-11-28 NZ NZ543307A patent/NZ543307A/en not_active IP Right Cessation
- 2001-11-28 EA EA200500010A patent/EA007209B1/ru not_active IP Right Cessation
- 2001-11-28 SG SG200503365-9A patent/SG148842A1/en unknown
- 2001-11-28 AT AT01998908T patent/ATE436055T1/de active
- 2001-11-28 NZ NZ554641A patent/NZ554641A/en unknown
- 2001-11-28 DK DK01998908T patent/DK1364314T3/da active
- 2001-11-28 WO PCT/GB2001/005242 patent/WO2002044940A2/en active Application Filing
- 2001-11-28 US US10/432,769 patent/US8224829B2/en not_active Expired - Fee Related
- 2001-11-28 EP EP08016612A patent/EP2009559A1/en not_active Withdrawn
- 2001-11-28 CN CNA2006100515624A patent/CN1822003A/zh active Pending
- 2001-11-28 NZ NZ526102A patent/NZ526102A/en not_active IP Right Cessation
- 2001-11-28 KR KR1020087004578A patent/KR20080024237A/ko active IP Right Grant
- 2001-11-28 EA EA200500008A patent/EA006640B1/ru not_active IP Right Cessation
- 2001-11-28 EG EG20011268A patent/EG23400A/xx active
- 2001-11-28 AU AU2209602A patent/AU2209602A/xx active Pending
- 2001-11-28 EP EP01998908A patent/EP1364314B1/en not_active Expired - Lifetime
- 2001-11-28 IL IL15611701A patent/IL156117A0/xx unknown
- 2001-11-28 EA EA200300522A patent/EA005641B1/ru not_active IP Right Cessation
- 2001-11-28 DE DE60139212T patent/DE60139212D1/de not_active Expired - Lifetime
- 2001-11-28 CA CA002429990A patent/CA2429990A1/en not_active Abandoned
- 2001-11-28 AU AU2002222096A patent/AU2002222096B2/en not_active Ceased
- 2001-11-28 ES ES01998908T patent/ES2329339T3/es not_active Expired - Lifetime
- 2001-11-28 CN CN018221858A patent/CN1552032B/zh not_active Expired - Fee Related
- 2001-11-29 MY MYPI20052453A patent/MY142616A/en unknown
- 2001-11-29 MY MYPI20015464A patent/MY132130A/en unknown
- 2001-11-30 AR ARP010105580A patent/AR035508A1/es not_active Application Discontinuation
-
2003
- 2003-05-26 IL IL156117A patent/IL156117A/en not_active IP Right Cessation
- 2003-05-27 NO NO20032416A patent/NO20032416L/no not_active Application Discontinuation
-
2005
- 2005-04-21 NO NO20051945A patent/NO332645B1/no not_active IP Right Cessation
-
2007
- 2007-10-15 JP JP2007267872A patent/JP4267046B2/ja not_active Expired - Fee Related
-
2008
- 2008-11-26 AU AU2008249232A patent/AU2008249232B2/en not_active Ceased
- 2008-11-27 JP JP2008303206A patent/JP2009080833A/ja active Pending
-
2009
- 2009-10-07 CY CY20091101032T patent/CY1109459T1/el unknown
- 2009-11-15 IL IL202125A patent/IL202125A/en not_active IP Right Cessation
-
2011
- 2011-05-02 AU AU2011202009A patent/AU2011202009A1/en not_active Ceased
Cited By (1)
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
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 |