Su cs.stackexchange ho chiesto informazioni sulla libreria di scale di algebird su github, speculando sul motivo per cui potrebbero aver bisogno di un pacchetto astratto di algebra.
La pagina github ha alcuni indizi:
Implementazioni di Monoidi per algoritmi di approssimazione interessanti, come filtro Bloom, HyperLogLog e CountMinSketch. Questi ti consentono di pensare a queste operazioni sofisticate come potresti fare con i numeri e di aggiungerle in hadoop o online per produrre statistiche e analisi potenti.
e in un'altra parte della pagina GitHub:
È stato originariamente sviluppato come parte dell'API Matrix di Scalding, in cui le matrici avevano valori che sono elementi di monoidi, gruppi o anelli. Successivamente, fu chiaro che il codice aveva un'applicazione più ampia all'interno di Scalding e su altri progetti all'interno di Twitter.
Anche Oskar Boykin di Twitter è intervenuto:
La risposta principale è che sfruttando la struttura dei semi-gruppi, possiamo costruire sistemi che si parallelizzano correttamente senza conoscere l'operazione sottostante (l'utente promette associatività).
Usando i Monoidi, possiamo sfruttare la scarsità (abbiamo a che fare con molte matrici sparse, in cui quasi tutti i valori sono zero in alcuni Monoidi).
Usando gli Anelli, possiamo fare la moltiplicazione della matrice su cose diverse dai numeri (cosa che a volte abbiamo fatto).
Lo stesso progetto algebird (così come la storia del problema) spiega abbastanza chiaramente cosa sta succedendo qui: stiamo costruendo molti algoritmi per l'aggregazione di grandi set di dati e sfruttare la struttura delle operazioni ci dà una vittoria sul lato dei sistemi (che di solito è il punto dolente quando si cerca di produrre algoritmi su migliaia di nodi).
Risolvi i problemi di sistema una volta per qualsiasi Semigruppo / Monoide / Gruppo / Anello, quindi puoi collegare qualsiasi algoritmo senza dover pensare a Memcache, Hadoop, Storm, ecc ...
Come sono Bloom filters
/ hyperloglog
/ countminsketch
come i numeri?
In che modo le aggregazioni di database hanno una struttura monoidale?
Che aspetto ha questo monoide? Hanno mai una struttura di gruppo?
Riferimenti bibliografici sarebbero utili.