Domanda

Come si organizzano il livello DB, la logica aziendale e l'API multipiattaforma del proprio sistema di gestione delle informazioni, se il caricamento e l'elaborazione di 500000 record di dati in una sessione è un'operazione normale (C # .NET 3.5 + MS SQL 2005)?

Sono particolarmente interessato a schemi di paging comprovati dalla produzione che si comportano bene con la concorrenza, la scalabilità e l'affidabilità.

Qualcuno ha qualche idea, in quale direzione scavare?

  • Progetti open source (non preoccuparti della lingua o della piattaforma, purché non sia Ook)
  • Libri
  • Articoli
  • Parole chiave di Google
  • forum o newsgroup

Qualsiasi aiuto sarebbe molto apprezzato!

Aggiornamento:

  • cercapersone semplice (ovvero: rownumber in SQL 2005) non funziona, poiché lì sono molte modifiche simultanee al database. L'elemento, che viene eliminato o inserito tra le richieste di pagina, rende automaticamente non valido l'indice di pagina corrente.
È stato utile?

Soluzione 3

Fatto l'implementazione. Sono stato informato di recente che uno dei caricamenti era di circa 2148849 record. Durante questo caricamento, Tiers ha risolto con successo un paio di connessioni interrotte e dozzine di deadlock a livello di DB.

Nel caso in cui qualcun altro abbia bisogno di alcune informazioni:

Altri suggerimenti

Questo è un buon libro per cominciare:

Patterns of Enterprise Application Architecture di Martin Fowler

Quando si tratta dell'ottimizzazione del DB per enormi quantità di dati, molto probabilmente trarrai vantaggio dall'utilizzo della tecnica "BigTable". Ho trovato articolo qui molto utile. A breve l'idea è di utilizzare la denormalizzazione del DB per scambiare spazio su disco per prestazioni migliori.

Per il paging in MS SQL 2005 ti consigliamo di trovare maggiori informazioni sull'uso della funzione ROW_NUMBER. Ecco solo un semplice esempio , tu ne troverai tonnellate usando google (parole chiave: ROW_NUMBER paging SQL 2005). Non scavare troppo però - non c'è magia nell'implementazione, piuttosto in come hai intenzione di utilizzare / presentare il paging stesso. La ricerca di Google è un buon esempio.

Nota: il supporto del paging nativo del framework NHibernate non è stato sufficiente per la nostra soluzione.

Probabilmente sarai anche interessato a creare l'indice FULLTEXT e a utilizzare la ricerca full-text. Ecco l'articolo di MSDN sulla creazione di un indice di testo completo e alcune informazioni sulla ricerca full-text.

Buona fortuna.

dandikas,

grazie per aver menzionato la denormalizzazione parziale. Sì, questo è l'approccio che sto prendendo in considerazione per migliorare le prestazioni di alcune query.

Sfortunatamente, NHibernate ORM non si adatta alla soluzione, a causa del sovraccarico di prestazioni che aggiunge. Lo stesso con il paging SQL: non funziona nello scenario di numerose modifiche simultanee (come rilevato da prove di stress )

Mi occupo di un data warehouse aziendale che carica alcuni feed di centinaia di migliaia di record.
Non sono sicuro che questo sia il tuo scenario, ma noi:

  • Ricevi file di testo che carichiamo su un database Sybase.
  • Formatta i diversi feed usando awk in modo che siano in un formato comune.
  • Caricali in una tabella intermedia denormalizzata usando bcp.
  • Esecuzione di stored procedure per popolare la struttura di database normalizzata.
  • Elimina dalla tabella intermedia denormalizzata.

Funziona abbastanza bene, ma forziamo i nostri caricamenti ad essere sequenziali. Cioè quando arrivano i feed entrano in una coda e noi elaboriamo il feed in testa alla coda prima di guardare il resto.

C'è qualcosa di utile?

  

Lo stesso con il paging SQL: non funziona nello scenario di numerosi   modifiche simultanee (rilevate dalle prove di stress)

Come ho già detto, non c'è magia nell'implementazione del paging & # 8211; usi ROW_NUMBER o una tabella temporanea. La magia qui è nel valutare qual è il tuo scenario di utilizzo del mondo reale più comune. L'uso della tabella temporanea insieme al tracciamento dell'utente potrebbe aiutare un po 'a superare lo scenario di modifiche simultanee. Anche se sento che vincerai di più rispondendo alle domande:

  1. Per quanto tempo l'utente rimane su una pagina prima di passare a un'altra?
  2. Con quale frequenza l'utente si sposta dalla prima a qualsiasi altra pagina?
  3. Qual è il numero di pagine comuni che l'utente guarderà?
  4. È fondamentale se alcune informazioni cambiano mentre l'utente si sposta da una pagina all'altra e viceversa?
  5. È fondamentale se alcune informazioni vengono eliminate mentre l'utente si trova sulla pagina che mostra le informazioni?

Cerca di non concentrarti su domande come: & # 8220; Come gestire qualsiasi possibile scenario di modifica simultanea durante il paging? & # 8221; prima di rispondere prima alle domande precedenti e quindi gestire solo le situazioni che contano davvero.

Un'altra nota è l'interfaccia utente. Controlla quanta più interfaccia utente di paginazione puoi trovare, in quanto ci sono soluzioni molto migliori rispetto alle sole frecce destra e sinistra o numeri di pagina allineati. Alcune soluzioni aiutano a nascondere / superare scenari di paging tecnicamente non risolvibili.

P.S. Se questa risposta è utile, la combinerò con la mia prima.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top