Lettura e aggiornamento condizionale di N righe, dove N 100.000 per l'elaborazione della sequenza del DNA

4

Ho un'applicazione proof of concept che usa le tabelle di Azure per associare le sequenze di DNA a "qualcosa".

La tabella 1 è la tabella principale. Elenca in modo univoco ogni sequenza di DNA. Il PK è un hash bilanciato del carico del RK. L'RK è l'unico valore codificato della sequenza del DNA.

Sono create tabelle aggiuntive per argomento. Il PK è un hash bilanciato dal carico e l'RK è il valore unico della sequenza del DNA. Supponiamo che la quantità di RK qui sia di molti ordini di grandezza inferiore alla tabella Master. Ogni soggetto ha una lista di sequenze di DNA N che hanno un riferimento nella tabella Master, dove N è > 100.000.

È possibile che molte tabelle facciano riferimento alla stessa sequenza di DNA, ma in questo caso sarà presente una sola voce nella tabella Master.

Il mio dilemma di Azure:

Ho bisogno di bloccare il riferimento nella tabella Master mentre lavoro con i dati. Devo gestire i timeout e impedire ad altri thread di sovrascrivere i miei dati mentre un thread C # sta lavorando con le informazioni. Altri thread devono rendersi conto che questo è bloccato e passare ad altri record sbloccati e fare il lavoro.

Idealmente mi piacerebbe avere un rapporto sui progressi di come sta andando il mio calcolo, e ho la possibilità di annullare il processo (e di svolgere i blocchi).

Domanda

Qual è l'approccio migliore per questo?

Sto osservando questi frammenti di codice come fonte di ispirazione:

link

link

    
posta random65537 12.09.2012 - 05:13
fonte

1 risposta

1

Sebbene non abbia funzionato con Azure, solo SQL Server in sede, sembra che si tratti veramente di accesso / concorrenza asincroni ai dati.

Perché non semplicemente ogni thread tiene traccia in una posizione centralizzata (ad esempio un'altra tabella) su quale insieme di dati sta lavorando. Quindi, i thread successivi possono ignorare tutti i record che sono già stati "ritirati" su un altro thread. Una volta che il thread ha terminato di lavorare con i dati che ha "estratto", rimuoverebbe il record dalla posizione centralizzata.

Inoltre, potresti includere la data / ora UTC di quando il record è stato "estratto", in modo che se qualcosa dovesse fallire o altrimenti scaduto, il record "check out" (cioè il blocco) potrebbe essere cancellato dal prossimo thread, o anche un processo di lavoro separato.

    
risposta data 03.11.2012 - 20:03
fonte

Leggi altre domande sui tag