Como as agregações de banco de dados formam um monóide?

11

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/ countminsketchlike?

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.

john mangual
fonte
alguém também pode esboçar a conexão "matrizes esparsas onde quase todos os valores são zero em um monóide"?
vzn
ee0=e
n×n
@ vzn, não os elementos dentro da matriz.
Nicholas Mancuso

Respostas:

14

Você pergunta por que as agregações de banco de dados têm estrutura monoidal.

ababa.b

.(a.b).c=a.(b.c)

Quase sempre há algum tipo de identidade, seja o número 0 ou 1, a sequência vazia, uma matriz de identidade, uma distribuição uniforme ou o conjunto vazio, que depende da operação. De fato, os dados geralmente formam um monóide .

O ponto prático sobre pensar em dados como formando um monóide é que ele fornece uma maneira de discutir operações em diferentes tipos de dados usando uma linguagem algébrica comum. Isso se traduz em bibliotecas de códigos genéricas que podem lidar com qualquer monoide, simplesmente passando uma operação de agregação apropriada como argumento.

Observe que muitos tipos de dados não têm inversos; portanto, uma estrutura de grupo é demais para se esperar. Se você possui uma estrutura de grupo, algumas maneiras adicionais de manipular os dados se tornam possíveis, mas como nem matrizes com multiplicação nem números inteiros positivos com adição têm inversos, dados não estruturados em grupo são bastante comuns.

+..+.

Um modelo de semicondução de agregação de dados existe há algum tempo na comunidade de satisfação de restrições. Observe que uma instância de problema de satisfação de restrição é uma consulta conjuntiva sobre um banco de dados específico de fatos, portanto, isso é bastante geral: as consultas mais práticas sobre dados são conjuntivas.

  • Stefano Bistarelli, Ugo Montanari e Francesca Rossi, Satisfação e otimização de restrições baseadas em semiring, JACM 44 (2), 1997, 201–236. doi: 10.1145 / 256303.256306

O atual surto de análise teórica do modelo de semicondução de agregação de dados foi iniciado em 2007, no contexto de proveniência . Proveniência é um termo sofisticado para anotar dados. Como qualquer tupla de banco de dados pode ser vista como anotações aplicadas a algum identificador de tupla exclusivo, a agregação de dados pode ser vista apenas como uma combinação de anotações. A proveniência é, portanto, uma generalização da idéia de agregação de dados, e foi explicitamente argumentado que o modelo teórico correto de combinação de anotações é um semirreboque. A semi-geral mais geral, dos polinômios de proveniência, permite, na verdade, acompanhar toda a história de como uma parte dos dados foi obtida das partes constituintes. Como exemplo, um valor pna análise de um estudo clínico, é possível acompanhar como foi calculado a partir de cada um dos resultados individuais. Se alguns deles estiverem errados (ou falsos), pode-se simplesmente recalcular sem os dados incorretos.

  • Todd J. Green, Grigoris Karvounarakis e Val Tannen, Semirings de proveniência , PODS 2007, 31–40. doi: 10.1145 / 1265530.1265535

Houve muito trabalho adicional usando semirriscos para agregar dados, veja os artigos que citam este .

Da perspectiva prática mais imediata que você cita, consulte, por exemplo, a estrutura GDL sobre como alguém pode efetivamente paralelizar uma computação agrupando a expressão de semicondução subjacente adequadamente.

  • Srinivas M. Aji e Robert J. McEliece, A lei distributiva generalizada , IEEE Transactions on Information Theory 46 (2), 2000, 325-343. doi: 10.1109 / 18.825794
András Salamon
fonte