Ho una tabella con Guid
come chiave primaria. La tabella ha già contenuto molte righe. Inoltre, ho un win service
, che fa alcune serie di azioni con ogni riga (possibili esigenze leggere e scrivere dati da un altro database). Quindi l'elaborazione di una riga richiede molto tempo. (In media circa 100 secondi)Ho bisogno di una funzione contributon per le istanze del servizio win
Il mio servizio win funziona in questo modo:
public class MyDto
{
public Guid Id { get; set; }
}
while (true){
if(time to start){
List<MyDto> rows = LoadData();
foreach(MyDto obj in rows){
Process(obj);//it takes in average about 100 sec
}
}
}
ho bisogno di ridurre i tempi di esecuzione di tutte le mie righe. Per alcune ragioni ho deciso di aumentare le insatnces del mio servizio di vincita. Quindi ho bisogno che ogni servizio di vincita scriva il proprio set di righe.
ho parametrizzata mia LoadData()
divertimento:
public List<MyDto> LoadData(int winServInstanceNumber){
}
quindi ho bisogno di una funzione di contributo dipende dai casi in totale Servizio vittoria contare e concreate numero di istanza del servizio vittoria.
potete offrire qualcosa di meglio di
//on .net side
obj.Id.GetHashCode()%totalWinServiceInstancesCount
o
--on sql side
HASHBYTES('MD5', CAST(id as varbinary(16)))%totalWinServiceInstancesCount
Buon punto, grazie per la risposta, ma stavo chiedendo informazioni sulla funzione di contributo. Votazione BTW per la soluzione – isxaker
@isxaker Spiacente, potrei perdersi qualcosa qui.Ho pensato che la tua domanda riguardava l'accelerazione dell'elaborazione dei tuoi dati invece di 'foreach (MyDto obj in rows)'. Potresti spiegare cosa significa per te "funzione di contributo"? Grazie –
È una funzione (si presenta come una qualche funzione di hash), dipende da uno (il numero di istanze di win service corrente) o da due (il numero di istanze di win serv attuale e il numero totale di win service) globali. Anche quella funzione ha un parametro di input (GUID nel mio caso). La funzione deve fare un po 'di "magia" con valore di input e return int number appartiene a [0; totalWinServInstancesNumber -1]; sembra un po 'un hash di Guid nel mio caso – isxaker