No cs.stackexchange , perguntei sobre a biblioteca algebird scala no github, especulando por que eles precisam de um pacote de álgebra abstrata.
A página do github tem algumas dicas:
Implementações de Monoids para algoritmos de aproximação interessantes, como filtro Bloom, HyperLogLog e CountMinSketch. Isso permite que você pense nessas operações sofisticadas como números e adicione-as no hadoop ou online para produzir estatísticas e análises poderosas.
e em outra parte da página do GitHub:
Foi originalmente desenvolvido como parte da API Matrix do Scalding, onde Matrices tinha valores que são elementos de Monoids, Groups ou Rings. Posteriormente, ficou claro que o código tinha uma aplicação mais ampla no Scalding e em outros projetos no Twitter.
Até Oskar Boykin, do Twitter, entrou na conversa:
A principal resposta é que, ao explorar a estrutura de semi-grupo, podemos construir sistemas que se paralelizam corretamente sem conhecer a operação subjacente (o usuário está prometendo associatividade).
Ao usar o Monoids, podemos tirar proveito da escassez (lidamos com muitas matrizes esparsas, onde quase todos os valores são zero em algum Monóide).
Usando anéis, podemos fazer a multiplicação da matriz sobre outras coisas que não números (o que ocasionalmente fizemos).
O próprio projeto do algebird (assim como o histórico do problema) explica claramente o que está acontecendo aqui: estamos construindo muitos algoritmos para agregação de grandes conjuntos de dados e alavancando a estrutura das operações nos dá uma vitória no lado dos sistemas (que geralmente é o ponto problemático ao tentar produzir algoritmos em milhares de nós).
Resolva os problemas do sistema uma vez para qualquer Semigrupo / Monóide / Grupo / Anel e, em seguida, você pode conectar qualquer algoritmo sem ter que pensar em Memcache, Hadoop, Storm, etc ...
Como são os números Bloom filters
/ hyperloglog
/ countminsketch
like?
Como é que as agregações de banco de dados têm uma estrutura monoidal?
Como é esse monóide? Eles já têm estrutura de grupo?
Referências bibliográficas seriam úteis.