Tengo una colección de tuplas (x,y)
de enteros de 64 bits que componen mi conjunto de datos. Tengo, digamos, billones de estas tuplas; no es factible mantener el conjunto de datos en la memoria en ninguna máquina en la tierra. Sin embargo, es bastante razonable almacenarlos en el disco.Consulta eficiente de un árbol B + que contiene datos multidimensionales
Tengo una tienda en disco (un B + -tree) que permite la consulta rápida y concurrente de datos en una sola dimensión. Sin embargo, algunas de mis consultas dependen de ambas dimensiones.
ejemplos de consulta:
- encontrar la tupla cuyo
x
es mayor que o igual que un valor dado - Encuentra la tupla cuyo
x
es lo más pequeño posible S.T. esy
es mayor o igual que un valor dado - Encuentra la tupla cuyo
x
es lo más pequeño posible a.t. sey
es menor o igual a un valor determinado - realizar operaciones de mantenimiento (insertar alguna tupla, eliminar algunos tupla)
La mejor apuesta que he encontrado son curvas de orden Z, pero me parece que no puede averiguar cómo realizar las consultas dado mi conjunto de datos bidimensionales.
Las soluciones que no son aceptables incluyen un escaneo secuencial de los datos, esto podría ser demasiado lento.
Creo que esos fueron solo ejemplos de consultas, no toda la gama de consultas que podrían necesitar. Dicho esto, para dos variables, supongo que son como máximo 4 índices diferentes (es decir, x, y, x + y y x-y), así que, claro. :) –
Esto no funciona, toma el ejemplo 2: estoy buscando un 'y' de al menos 20 con el' x' más pequeño posible. Concatenar 'y' y' x' y crear una consulta mayor que o igual para 'y + x' se vería como' 20 + 0'. Esto podría encontrar '20 + 50' pero omitiría' 21 + 10'. – user1290696
Malo-- No entendí las necesidades de sus consultas, que son realmente 2d. Intentaré con otra respuesta. – antlersoft