Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Configura Lucene.Net con SQL Server

Sì, l'ho usato esattamente per quello che descrivi. Avevamo due servizi:uno per la lettura e uno per la scrittura, ma solo perché avevamo più lettori. Sono sicuro che avremmo potuto farlo con un solo servizio (lo scrittore) e incorporare il lettore nell'app Web e nei servizi.

Ho usato lucene.net come indicizzatore di database generale, quindi quello che ho ottenuto sono stati fondamentalmente ID DB (per messaggi di posta elettronica indicizzati) e l'ho anche usato per recuperare informazioni sufficienti per popolare i risultati di ricerca o simili senza toccare il Banca dati. Ha funzionato alla grande in entrambi i casi, anche se l'SQL può diventare un po' lento, dato che devi praticamente ottenere un ID, selezionare un ID ecc. Abbiamo aggirato il problema creando una tabella temporanea (con solo la riga ID) e inserimento in blocco da un file (che era l'output di lucene) quindi unendosi alla tabella dei messaggi. È stato molto più veloce.

Lucene non è perfetto e devi pensare un po' fuori dagli schemi del database relazionale, perché TOTALMENTE non lo è, ma è molto molto bravo in quello che fa. Vale la pena dare un'occhiata e, mi è stato detto, non ha i problemi "oops, mi dispiace, devi ricostruire di nuovo il tuo indice" che ha FTI di MS SQL.

A proposito, avevamo a che fare con 20-50 milioni di e-mail (e circa 1 milione di allegati unici), per un totale di circa 20 GB di indice lucene, credo, e oltre 250 GB di database SQL + allegati.

Le prestazioni sono state fantastiche, per non dire altro:assicurati solo di pensare e modificare i tuoi fattori di fusione (quando unisce i segmenti dell'indice). Non c'è problema nell'avere più di un segmento, ma può esserci un GRANDE problema se provi a unire due segmenti che hanno elementi da 1 milione in ciascuno e hai un thread di controllo che interrompe il processo se richiede troppo tempo ... .. (sì, questo ci ha preso a calci in culo per un po'). Quindi mantieni il numero massimo di documenti per cosa BASSO (cioè, non impostarlo su maxint come abbiamo fatto noi!)

EDIT Corey Trager ha documentato come utilizzare Lucene.NET in BugTracker.NET qui.