Ho una raccolta di tuple (x,y)
di numeri interi a 64 bit che costituiscono il mio set di dati. Ho, ad esempio, trilioni di queste tuple; non è possibile mantenere il set di dati in memoria su qualsiasi macchina sulla terra. Tuttavia, è abbastanza ragionevole memorizzarli su disco.Interrogazione efficiente di un albero B + contenente dati multidimensionali
Ho un archivio su disco (un albero B +) che consente l'interrogazione rapida e simultanea dei dati in una singola dimensione. Tuttavia, alcune delle mie query si basano su entrambe le dimensioni.
esempi di query:
- trova la tupla cui
x
è maggiore o uguale a un dato valore - Trova tupla cui
x
è il più piccolo possibile S.T. è è maggiore o uguale ad un dato valore - Trova la tupla il cui
x
è il più piccolo possibile, ad es. èy
è inferiore o uguale a un dato valore - operazioni di manutenzione (inserire alcune tuple, rimuovere alcune tuple)
La cosa migliore che ho trovato sono curve Z-order, ma io non riesco a capire come condurre le domande dato il mio set di dati bidimensionale.
Le soluzioni che non sono accettabili includono una scansione sequenziale dei dati, che potrebbe essere troppo lenta.
Penso che quelli fossero solo esempi di query, non l'intera gamma di query che potrebbero richiedere. Detto questo, per due variabili, suppongo che sia al massimo 4 diversi indici (cioè, x, y, x + y e x-y), quindi, certo. :) –
Questo non funziona, prendi l'esempio 2: Sto cercando un 'y' di almeno 20 con il' x' minimo possibile. La concatenazione di 'y' e' x' e la creazione di una query maggiore o uguale a 'y + x' sarebbe simile a' 20 + 0'. Questo potrebbe trovare '20 + 50' ma saltare' 21 + 10'. – user1290696
Il mio male-- Non ho capito i bisogni delle tue domande, che sono veramente 2d. Proverò un'altra risposta – antlersoft