DB Struttura dati per l'elenco sequenziale .Net con insert, delete, move

1

Il problema è mantenere in .net un elenco di righe che hanno una sequenza specifica in cui le righe possono essere inserite, spostate e cancellate, ed essere in grado di salvare e ripristinare quella sequenza dal disco.

In memoria posso usare una lista .net con insert ed eliminare per posizione dell'indice. Le alternative che vedo per la conversione in un file su disco che mantiene la sequenza di elenchi sono a) utilizzando i campi "successivo" che contengono ID record o b) campi "prev" e "successivo" più efficienti (quello che penso come elenco collegato ) o, c) molto inefficiente, aggiornando un numero di sequenza in ogni record di dati per ogni modifica nell'elenco di memoria.

Quali potrebbero essere altri modi comuni ed efficaci per realizzare questo?

"DB" = database ... Ho bisogno di spostare i dati dentro e fuori da un database

"Inserisci ... per posizione di indice" = inserisci in qualsiasi punto della lista, cioè in alto, in mezzo, alla fine (cioè non un semplice inserto SQL che significa "aggiungi alla fine")

L'applicazione coinvolgerà, auspicabilmente, migliaia di piccoli gruppi separati, ciascuno dei quali lavora simultaneamente in tempo reale su elenchi separati. Le liste, quando sono completamente compilate, avranno una media di 200 righe, forse 300 byte per riga. Le liste fanno parte di un set di dati più complesso che include voti e altre informazioni. Quindi, per una stima approssimativa, diciamo 100 KB per un elenco completo e 50 KB in media per un elenco durante la sua fase di costruzione. Gli elenchi verranno aggiornati, per gruppo, forse una volta ogni dieci secondi. Quindi, ancora una volta, molto approssimativamente, 50 KB di dati di elenco scritti su disco per gruppo ogni dieci secondi, con l'app iniziale progettata per i gruppi 10K.

    
posta wayfarer 23.06.2016 - 07:41
fonte

2 risposte

1

Sei preoccupato per le prestazioni di aggiornamento di massa di un numero di sequenza, ma sospetto che sia prematuro. I numeri di sequenza di aggiornamento collettivo (ad esempio, incrementano un campo per tutti gli articoli in una sezione di un elenco) possono essere eseguiti in un singolo aggiornamento SQL. Se il set medio è di 200 elementi, la prestazione probabilmente non sarà un problema.

Un problema più grande potrebbe essere l'ordinamento di una lista con campi precedenti / successivi, poiché ciò richiede un meccanismo ricorsivo, forse CTE a seconda del database. Ma di nuovo si può solo ordinare dal lato client, e probabilmente non sarà un problema se la lista media di 200 articoli.

Insomma, non penso che dovresti prendere una decisione basata su considerazioni relative alle prestazioni.

    
risposta data 18.09.2017 - 11:17
fonte
0

being able to save and restore that sequence from disk

Stiamo parlando di un file system, qui, o di un "DB", come nel titolo del tuo post?

Nel file system, scrivi gli elementi della lista in un file. Verranno memorizzati nell'ordine desiderato e potranno essere letti nello stesso ordine. Il blocco note ha qualcosa di notevolmente simile.

Se si desidera inserirli in un database, tuttavia, è necessario memorizzare anche tali informazioni sulla sequenza. Perché?

Perché le righe in una tabella di database non hanno ordine .

Il solo modo per garantire assolutamente e costantemente l'ordine in cui vengono recuperate le righe avviene tramite la clausola "Ordina per" nel tuo SQL. Per questo, avrai bisogno dei dati di sequenziamento e degli oggetti che ti interessano.

    
risposta data 23.06.2016 - 13:37
fonte

Leggi altre domande sui tag