Ho circa 800.000 file di dati memorizzati nella memoria condivisa di boost dal database. I dati sono nella forma:
Id Color Length Size
1 1 2 4
2 3 4 5
3 2 2 0
4 1 2 4......and so on
I colori possono essere il valore compreso tra 1 e 12, la lunghezza 1-4 e la dimensione 1-5. L'Id, Lunghezza, Colore, Dimensione sono memorizzati in un vettore separato di 800.000 dimensioni nella memoria condivisa. Quindi c'è il vettore Id per Id, Color vector for Color e così via.
Voglio filtrare i dati prima di eseguire alcuni calcoli. Quindi desidero i dati per i quali Colore è 1 e lunghezza è 2 e Dimensione 4 i.e riga 1 e 4 nel caso precedente. C'è un modo efficace per filtrare i dati senza utilizzare per il ciclo e passare attraverso tutte le 800.000 immagini e controllando la condizione?
In questo momento sto solo usando l'istruzione mysql per ottenere gli ID dei dati che soddisfano la condizione.
"select Id from features_table where Color=1 and Length=2 and Size =4"
Ma c'è un modo più veloce per farlo? O dovrei attenermi a questo metodo? Sto cercando un metodo più veloce, quindi non sono sicuro che il recupero degli ID dal database aumenterà il tempo di esecuzione dell'algoritmo.
Quali sono le altre opzioni che posso prendere in considerazione in questo caso? Ho letto di Hash table, B-Tree, Binary Search tree e sono confuso, che è adatto per questo caso. Kd-tree sarà utile in questo caso? Perché molte immagini possono avere la stessa combinazione di colori, lunghezza e dimensioni. Non sono sicuro che kd-tree sia la cosa giusta da fare. Ho letto di FLANN in opencv usato per kd-tree. C'è qualche esempio o risorse che potrebbero essere utili in questo caso? O ci sono delle librerie c ++ integrate?