memorizza e recupera milioni di documenti usando c #

4

Sto lavorando a un progetto di integrazione, in cui la mia "app / servizio web" si troverà al centro dei documenti di servizio.

Fondamentalmente, una richiesta viene inviata con l'id del documento come parte della stringa di query, controllo se esiste e, se lo fa, riporta il documento (pdf) alla risposta. Ora, questo è molto semplice da fare e lo abbiamo fatto molte volte.

È qui che diventa molto complicato, ci saranno circa 5200 nuovi file aggiunti ogni settimana, cioè 3 GB a settimana (quindi circa 150 GB di dati all'anno). Ci aspettiamo di conservare 10 anni di dati.

Qual è il modo migliore per archiviare questi documenti e la ricerca deve essere molto rapida.

Alcune opzioni sono:

Se scelgo di salvare tutti questi file su una condivisione di rete, inizialmente sarà veloce ma nel tempo sarà molto lento.

Se scelgo SQL per archiviare questi file, non posso davvero archiviare tutti i documenti in una singola tabella o utilizzare partizionamento della tabella, partizionamento DB ecc. Se partecipo al partizionamento DB, è sempre un file DB da 150 GB ogni anno per il backup e il ripristino .

Stavo pensando di implementare RBS per MS SQL ma non sono sicuro di quanto sarà veloce.

Qualche suggerimento o altra opzione che potrei avere ....?

    
posta MicrosoftDevX 13.01.2014 - 08:49
fonte

3 risposte

7

Questo è in realtà un numero molto modesto di file per un sistema di gestione dei documenti. 5200 file x 52 settimane x 10 anni sono meno di 3 milioni. Anche a tuo calcolo, il suo solo 1,5 TB di dati su 10 anni. Che si adatta facilmente su un disco rigido.

Per questo volume di file, ti consiglio di conservare i file nel file system, non nel database. Vi darà una maggiore flessibilità in merito a come archiviare e fare il backup del contenuto. Inoltre ci vorrà il carico di trasferire i file dal server SQL. Dovresti semplicemente mantenere i metadati e un puntatore al file nel database.

Se non desideri memorizzare i file sul sito, potresti anche considerare Amazon S3 o un servizio simile. Ci sarebbe un costo, ovviamente, ma non devi preoccuparti dell'hardware.

    
risposta data 22.01.2014 - 19:40
fonte
3

Potresti comporre l'ID del documento come

yywwdcxxxx

yy   last two digits of the year
ww   the calendar week 1..53
d    the day 1..7
c    check sum digit from ID+filename (cf. http://en.wikipedia.org/wiki/Check_digit)
xxxx sequence number to distinguish documents from the same day

Mappare direttamente questa struttura ID in una struttura di directory in un filesystem. Crea le nuove directory al volo, se necessario.

Supponendo che si desidera mantenere il nome del documento originale, è possibile memorizzare il documento sotto

.. \ aa \ ww \ d \ c \ xxxx_original_name

xxxx è il numero di sequenza consecutivo per i documenti per un determinato giorno. Puoi usare una lunghezza dinamica per il numero di sequenza per aumentare la flessibilità.

Se non sei libero di creare il tuo ID documento, puoi mappare lo schema esistente a una struttura ID come suggerito sopra.

La struttura orientata alle date consente di archiviare facilmente i documenti obsoleti anno dopo anno e di eseguire ogni giorno un backup corretto.

Il filesystem dovrebbe probabilmente essere fault-tolerant. Potresti utilizzare un RAID o archiviare i file nelle directory shadow parallele per avere una possibilità di recupero.

Puoi anche archiviare i tuoi file in un database o in un server LDAP. Ma 5200 file a settimana non richiedono troppo un filesystem. E avresti ancora bisogno di uno schema per ID documento univoco.

Tieni presente che determinati file system (sotto Unix) hanno un numero massimo di file.

    
risposta data 22.01.2014 - 19:19
fonte
0

Se è necessario archiviare i dati insieme ai documenti - dare un'occhiata al server FileStream funzionalità.

Se non lo fai - memorizzali su un file system, ma metti ogni settimana / anno nella propria directory per mantenere il numero di file in una singola cartella a qualche migliaio. Ciò lo manterrà abbastanza veloce.

    
risposta data 22.01.2014 - 20:26
fonte

Leggi altre domande sui tag