Ho una struttura per la memorizzazione delle proprietà degli elementi su SQL Server:
ItemId PropertyId Value
1 1 a
1 2 b
2 1 a
2 2 5
Attualmente ci sono oltre 130000 articoli e 10000 proprietà e i numeri stanno crescendo. Il numero attuale di file è un po 'più di 15 milioni. Se avessi creato una tabella pivot per questi dati, avrebbe un po 'più di 1,3 miliardi di celle, 15 milioni delle quali non sono nulle.
Gli utenti possono creare espressioni personalizzate su questi dati come:
X: P1 = 'a' (rule X selects items which have property 1 with value 'a')
Y: P2 <> 'b'
Z: P3 like '%c%'
T: P4 > 5 (rule T selects items which have property 4 with a value greater than 5)
e formano filtri usando espressioni come:
(X AND T) (items that match both X and Y)
(X AND Y) OR (Z AND T)
(X OR Y) AND (Z OR NOT T)
(X OR Y AND T) OR Z
Ho bisogno di interrogare il risultato di alcuni filtri (generalmente 4 o 5) come risposta di una singola richiesta web. Come posso farlo velocemente? Esiste un metodo di archiviazione o un algoritmo super efficiente per ottenere questo filtro?
Sarebbe grandioso se questo fosse possibile su SQL Server, ma sono anche aperto a soluzioni come la memorizzazione di questa porzione di dati su un database non sql.