Sur cs.stackexchange, j'ai posé des questions sur la bibliothèque d' algebird scala sur github, spéculant sur les raisons pour lesquelles ils pourraient avoir besoin d'un paquet d'algèbre abstrait.
La page github contient quelques indices:
Implémentations de Monoids pour des algorithmes d'approximation intéressants, tels que le filtre Bloom, HyperLogLog et CountMinSketch. Ceux-ci vous permettent de penser à ces opérations sophistiquées comme vous le feriez avec des chiffres, et de les additionner en hadoop ou en ligne pour produire des statistiques et des analyses puissantes.
et dans une autre partie de la page GitHub:
Il a été initialement développé dans le cadre de l'API Matrix de Scalding, où les matrices avaient des valeurs qui sont des éléments de monoïdes, de groupes ou d'anneaux. Par la suite, il était clair que le code avait une application plus large au sein de Scalding et sur d'autres projets au sein de Twitter.
Même Oskar Boykin de Twitter a sonné:
La réponse principale est qu'en exploitant la structure semi-groupe, nous pouvons construire des systèmes qui se parallélisent correctement sans connaître l'opération sous-jacente (l'utilisateur promet l'associativité).
En utilisant des Monoïdes, nous pouvons profiter de la rareté (nous avons affaire à beaucoup de matrices clairsemées, où presque toutes les valeurs sont nulles dans certains Monoïdes).
En utilisant des anneaux, nous pouvons faire une multiplication matricielle sur des choses autres que des nombres (ce que nous avons parfois fait).
Le projet algebird lui-même (ainsi que l'historique des problèmes) explique assez clairement ce qui se passe ici: nous construisons beaucoup d'algorithmes pour l'agrégation de grands ensembles de données, et tirer parti de la structure des opérations nous donne une victoire du côté des systèmes (ce qui est généralement le point douloureux lorsque l'on tente de produire des algorithmes sur des milliers de nœuds).
Résolvez les problèmes de systèmes une fois pour tout Semigroup / Monoïde / Groupe / Anneau, et ensuite vous pouvez brancher n'importe quel algorithme sans avoir à penser à Memcache, Hadoop, Storm, etc ...
Comment sont Bloom filters
/ hyperloglog
/ countminsketch
comme les nombres?
Comment se fait-il que les agrégations de bases de données aient une structure monoïdale?
À quoi ressemble ce monoïde? Ont-ils jamais une structure de groupe?
Des références bibliographiques seraient utiles.