Elimina rapidamente e crea combinazioni di dati valide

3

Sto davvero lottando con un problema in cui ho bisogno di "sfoltire" gli scenari disponibili a quelli che un utente ha definito come validi. Di seguito è riportato un piccolo esempio del problema che sto cercando di risolvere in .Net (C #). Dati i livelli / i valori mostrati sotto, l'utente potrebbe scegliere che ci sono solo poche combinazioni valide, ma se immaginate che i livelli seguenti siano 30-40 livelli di dati invece del 5 che ho mostrato, potreste vedere il mio dilemma. Potrei dover passare da milioni a miliardi di combinazioni NON VALIDE per ottenere le combinazioni valide. Ci saranno casi in cui tutti i valori nel livello sono applicabili e alcuni in cui sono solo quelle combinazioni che l'utente ha specificato.

Livelli attuali / Valori dei dati:

Gli utenti hanno affermato che le combinazioni valide sono:

*Notice all from level 4 are valid
Receiver -> Sony -> 500 -999 -> Retail
Receiver -> Sony -> 1000 - Up -> Retail  

Risultati attesi dai 5 livelli di informazione forniti:

Receiver -> Sony -> 500-999 -> Open -Box -> Retail
Receiver -> Sony -> 500-999 -> New -> Retail
Receiver -> Sony -> 1000-Up -> Open -Box -> Retail
Receiver -> Sony -> 1000-Up -> New -> Retail

Le cose che ho provato sono performanti con piccoli set, ma se dovessi avere un sacco di livelli e grosse lacune nelle combinazioni che non mi permettessero di sfoltire le combinazioni valide fino a quando non ero nei livelli più profondi, sto incontrando importanti problemi di prestazioni. Ovviamente non sto affrontando il problema in modo errato.

Qualsiasi altro punto di vista o suggerimento su come affrontare il problema sarebbe molto apprezzato.

    
posta scarpacci 09.08.2013 - 17:30
fonte

2 risposte

1

Quello che stai facendo è chiamato ricerca sfaccettata . C'è molta ricerca in quest'area su come farlo in modo efficiente, ma ti consiglio di iniziare con una soluzione esistente come Apache Solr .

    
risposta data 09.08.2013 - 17:41
fonte
0

Presumo che tu abbia una sorta di metodo algoritmico per determinare quali combinazioni valide sono (altrimenti, avrai casi limite in abbondanza)?

Supponendo che sia così, questo sembra un lavoro per un albero. Il nodo radice è un nodo arbitrario vuoto che rappresenta lo store. I nodi figli della radice sono tutti gli elementi nella prima colonna. I nodi figli di quelli saranno nodi validi dalla colonna 2, ecc.

Mi aspetto che i valori dell'albero vengano indicizzati nelle righe db effettive (ad esempio, ogni nodo dell'albero contiene semplicemente la chiave primaria dell'elemento db che rappresenta).

Questo descrive qualcosa in memoria, ma poiché dici che esiste un vincolo di dimensioni, è probabile che tu debba codificare questa struttura nel DB. Una tabella di join che rappresenti la relazione genitore / figlio tra gli elementi dovrebbe essere sufficiente (tuttavia, se i "livelli" sono suddivisi su più tabelle, ciò risulterebbe più difficile).

    
risposta data 09.08.2013 - 20:18
fonte

Leggi altre domande sui tag