Comment les agrégations de bases de données forment-elles un monoïde?

11

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/ countminsketchcomme 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.

John mangual
la source
quelqu'un peut-il également esquisser la connexion "matrices clairsemées où presque toutes les valeurs sont nulles dans un monoïde"?
vzn
@vzn. 0 est l'identité. Cela vous évite d'avoir à calculer quoi que ce soit chaque fois que certains éléments et 0 apparaissent ensemble ( ). Si vos matrices sont rares, cela signifie que vous pouvez obtenir une accélération car vous pouvez simplement "sauter" une grande partie du calcul. e 0 = eee0=e
Nicholas Mancuso
@nicholas en d'autres termes des matrices clairsemées qui peuvent être représentées comme des monoides? (qui n'est pas toutes les matrices ...) de wikipedia monoid def , apparemment des monoides sous la forme: "L'ensemble de toutes les matrices sur un anneau donné, avec addition de matrice ou multiplication de matrice comme opération." n×n
vzn
@vzn, pas d'éléments à l'intérieur de la matrice.
Nicholas Mancuso

Réponses:

14

Vous demandez pourquoi les agrégations de bases de données ont une structure monoïdale.

Supposons que nous voulons combiner les valeurs de données et , mais que les choses restent générales - il peut s'agir d'entiers, de chaînes, de nombres à virgule flottante, de vecteurs, de matrices, de distributions de probabilités, d'ensembles ou de tout autre élément que nous voulons stocker et manipuler. Nous désignons donc "l'agrégation" de et par .ababa.b

L'opérationest généralement associatif, car nous ne voulons pas que l'ordre dans lequel il est appliqué affecte le résultat: nous voulons . Nous avons donc un semi - groupe ..(a.b).c=a.(b.c)

Il existe presque toujours une sorte d'identité, que ce soit le nombre 0 ou 1, la chaîne vide, une matrice d'identité, une distribution uniforme ou l'ensemble vide, qui dépend de l'opération. Donc, en fait, les données forment généralement un monoïde .

Le point pratique de penser que les données forment un monoïde est qu'elles fournissent un moyen de discuter des opérations sur différents types de données en utilisant un langage algébrique commun. Cela se traduit ensuite par des bibliothèques de code génériques qui peuvent traiter tous les monoïdes, en passant simplement une opération d'agrégation appropriée comme argument.

Notez que de nombreux types de données n'ont pas d'inverses, donc une structure de groupe est trop à espérer. Si vous avez une structure de groupe, alors certaines façons supplémentaires de manipuler les données deviennent possibles, mais comme ni les matrices avec multiplication, ni les entiers positifs avec addition n'ont d'invers, les données non structurées en groupe sont assez courantes.

Nous ne voulons généralement pas simplement stocker des données, mais exécuter des requêtes sur la base de données. Nous avons donc besoin d'une idée de ce qu'il faut faire lorsqu'une requête génère de nombreuses réponses. Cela nécessite souvent une opération de combinaison (qui peut être la même que ), Et qui doit être compatible avecdans la façon dont ils interagissent. Il faut donc une sorte de distributivité. Commutativité de et parfois aussi deest aussi souvent naturel. On a alors un semirage ou un semirage commutatif. Encore une fois, les inverses sont généralement trop à espérer, donc les demi-anneaux conviennent mieux que les anneaux.+..+.

Un modèle de semi-agrégation d'agrégation de données existe depuis un certain temps dans la communauté de satisfaction des contraintes. Notez qu'une instance de problème de satisfaction de contrainte est une requête conjonctive sur une base de données particulière de faits, c'est donc assez général: la plupart des requêtes pratiques sur les données sont conjonctives.

  • Stefano Bistarelli, Ugo Montanari et Francesca Rossi, Satisfaction et optimisation des contraintes basées sur Semiring, JACM 44 (2), 1997, 201–236. doi: 10.1145 / 256303.256306

La poussée actuelle de l'analyse théorique du modèle de semi-agrégation d'agrégation de données a été lancée en 2007, dans le contexte de la provenance . La provenance est un terme de fantaisie pour annoter des données. Étant donné que tout tuple de base de données peut être considéré comme des annotations appliquées à un identifiant de tuple unique, l'agrégation de données peut être considérée comme une simple combinaison d'annotations. La provenance est donc une généralisation de l'idée d'agrégation de données, et il a été explicitement avancé que le bon modèle théorique de combinaison d'annotations est un semirage. Le semiring le plus général, des polynômes de provenance, permet en fait de garder une trace de l'historique complet de la façon dont un élément de données a été obtenu à partir des parties constituantes. Par exemple, une valeur pdans l'analyse d'un essai clinique peut garder une trace de la façon dont il a été calculé à partir de chacun des résultats des essais individuels. Si certains d'entre eux s'avèrent faux (ou faux), alors on peut simplement recalculer sans les mauvaises données.

  • Todd J. Green, Grigoris Karvounarakis et Val Tannen, Demirings Provenance , PODS 2007, 31–40. doi: 10.1145 / 1265530.1265535

Il y a eu beaucoup de travail supplémentaire en utilisant des demi-anneaux pour agréger des données, voir les articles citant celui-ci .

Du point de vue plus immédiatement pratique que vous citez, voyez par exemple le cadre GDL pour savoir comment on peut paralléliser efficacement un calcul en groupant de manière appropriée l'expression semiring sous-jacente.

  • Srinivas M. Aji et Robert J. McEliece, The generalized distributive law , IEEE Transactions on Information Theory 46 (2), 2000, 325–343. doi: 10.1109 / 18.825794
András Salamon
la source