Il deposito temporaneo di conservazione dei dati tra le iterazioni del programma? [chiuso]

StackOverflow https://stackoverflow.com/questions/4399610

  •  10-10-2019
  •  | 
  •  

Domanda

Sto lavorando su un'applicazione che funziona in questo modo:

  1. Si recupera i dati da molte fonti, con conseguente pool di circa 500,000-1,500,000 record (dipende dal tempo / giorno)
  2. I dati viene analizzato
  3. una parte dei dati vengono elaborati in modo da confrontarlo con pre-esistenti di dati (leggere dal database), i calcoli sono fatti, e memorizzati nel database. Con conseguente insieme di dati che deve essere conservato nel database è, tuttavia, molto più piccole dimensioni (rispetto ai set di dati originali), e varia da 5,000-50,000 record. Questo processo aggiorna quasi sempre i dati esistenti, forse aggiunge qualche record di più.
  4. Quindi, i dati dal punto 2 dovrebbe essere tenuto in qualche modo, da qualche parte, in modo che la prossima volta i dati vengono recuperati, v'è un insieme di dati che possono essere utilizzati per eseguire calcoli, senza i dati preesistenti toccare nel database. Tengo a precisare che questi dati possono essere perso, non è insostituibile (informazioni chiave può essere letta dal database, se necessario), ma sarebbe accelerare il processo la prossima volta.

componenti di applicazioni possono (e saranno) scappare diversi computer (nella stessa rete), quindi lo stoccaggio deve essere raggiungibile da più host.

Ho pensato di utilizzare memcached, ma non sono del tutto sicuro devo fare così, perché un record è di solito non più piccola di 200 byte, e se devo 1.500.000 record, credo che sarebbe pari a oltre 300 MB di memcached della cache ... Ma questo non sembra scalabile per me - che se i dati fosse 5x tale importo? Se fosse di consumare 1-2 GB di memoria cache solo per mantenere i dati tra iterazioni (che potrebbe facilmente accadere)?

Quindi, la domanda è: : quale meccanismo di stoccaggio temporaneo sarebbe più adatto per questo tipo di trattamento? Non ho pensato di utilizzare tabelle temporanee MySQL, come io non sono sicuro se possono persistere tra le sessioni, e possono essere usate da altri host in rete ... Qualsiasi altro suggerimento? Qualcosa devo considerare?

È stato utile?

Soluzione

So che sembra molto vecchia scuola, ma un file temporaneo sul SAN sarebbe facile ed economico.

Il caricamento di un file di 300M all'inizio di ogni corsa è banale rispetto al consumo 300M di memoria cache per tutto il tempo.

E se è possibile ricreare dalle chiavi del database, sarebbe saggio di scrittura e test che parte e renderlo automatico che se il file temporaneo non era disponibile, informazioni sarebbe minata dai tasti e ricreato.

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