Domanda

Ho bisogno di usare qualcosa per il mio sistema di coordinate con diversi consumatori / produttori ogni esecuzione su diverse macchine con sistemi operativi diversi. Sono stato alla ricerca sull'uso di MySql per fare questo, ma sembra ridicolmente difficile.

I miei requisiti sono semplici: io voglio essere in grado di aggiungere o rimuovere i consumatori / produttori, in qualsiasi momento e quindi non dovrebbero dipendere da un l'altro a tutti. Naturalmente un database sarebbe separare le due cose bene.

Sono stato a guardare messaggio Q4M accodamento plug-in per MySql ma sembra complicato da usare.

Io ho bisogno di input su come costruire il mio sistema migliore possibile.

È stato utile?

Soluzione

  

Ho bisogno di usare qualcosa per coordinare   il mio sistema con diversi   consumatori / produttori ogni esecuzione su   macchine differenti con differenti   sistemi operativi

Questa è una coda di messaggi. Non perseguire altre alternative. Tutto il resto (cioè, utilizzando un database con inserto ed eliminazioni) è terribilmente lento e farraginoso.

Costruire una grande coda, lento messaggi con un database spesso andato a male, in pratica, perché (1) basi di dati sono lenti, (2) basi di dati sono enormi e complessi, (3) avete il blocco e problemi di conflitto che rendono ogni transazione potenzialmente lento, (4) è molto più in alto di quanto il problema merita.

Ci sono numerose soluzioni coda di messaggi.

Se non è possibile rendere il lavoro Q4M, si dovrebbe passare ad un altro.

http://en.wikipedia.org/wiki/Message_queue

http://linux.die.net/man/7/mq_overview

http://qpid.apache.org/

http://code.google.com/p/httpsqs/

Altri suggerimenti

In realtà è (abbastanza) complicato per costruire tale sistema. (Dico abbastanza, perché è ovviamente fattibile).

Se si dispone di produttore multipla e una dei consumatori, è facile. Tutti produttore scrivere contemporaneamente, e il singolo consumatore leggere i dati non appena sono visibili (impegnati).

Ma se si vuole la scalabilità con alcuni dei consumatori, è necessario creare uno schema di blocco che non è banale. (È necessario assicurarsi che nessuna riga viene inviato a due consumatori. Questo non è facile da ottenere con le transazioni di database e serrature. Soluzioni Naive portare alla serializzazione di tutti recapito dei messaggi, come si aveva solo un consumatore, che non vogliamo. ).

Vorrei suggerire di utilizzare una soluzione integrata. Si può anche leggere questa domanda su una domanda simile.

Credo che sia fattibile senza software di terze parti.

Il mio primo progetto sarebbe simile a questa:

  • Il produttore scrive i dati nel database
  • Per garantire la coerenza deve utilizzare le transazioni
  • Il processo di consumo dei dati (lettura e cancellazione) utilizzando anche le transazioni.

A causa del requisito transazioni InnoDB è la scelta logica del motore di archiviazione. Inoltre è necessario scegliere con attenzione il livello di isolamento. La mia prima risposta è "serializzabile" per evitare letture fantasma, ma forse un livello più debole è anche possibile.

Se le prestazioni e la scalabilità è un problema, si dovrebbe considerare l'utilizzo di una soluzione di messaggistica "reale". Stendere il vostro uno molto probabilmente portare a problemi di prestazioni e / o scalabilità.

Dipende situazioni.

Nel mio caso, l'unico produttore di fare migliaia messaggio al giorno, e molti consumatori consumano questi messaggi nelle 24 ore, che ognuno richiedere diversi minites per terminare. Quindi, penso che il mysql avrebbe incontrato la mia richiesta, e posso usare le transazioni al fine di garantire la coerenza tra i consumatori.

Spero che sarà di aiuto.

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