Auf cs.stackexchange fragte ich nach der Algebird- Scala-Bibliothek auf Github und spekulierte darüber, warum sie möglicherweise ein abstraktes Algebra-Paket benötigen.
Die Github-Seite enthält einige Hinweise:
Implementierungen von Monoiden für interessante Approximationsalgorithmen wie Bloom-Filter, HyperLogLog und CountMinSketch. Mit diesen können Sie sich diese ausgefeilten Vorgänge wie Zahlen vorstellen und sie in Hadoop oder online addieren, um leistungsstarke Statistiken und Analysen zu erstellen.
und in einem anderen Teil der GitHub-Seite:
Es wurde ursprünglich als Teil der Matrix-API von Scalding entwickelt, bei der Matrizen Werte hatten, die Elemente von Monoiden, Gruppen oder Ringen sind. In der Folge war klar, dass der Code eine breitere Anwendung in Scalding und in anderen Projekten innerhalb von Twitter hatte.
Sogar Oskar Boykin von Twitter mischte sich ein:
Die Hauptantwort lautet, dass wir durch Ausnutzung der Halbgruppenstruktur Systeme erstellen können, die korrekt parallelisieren, ohne die zugrunde liegende Operation zu kennen (der Benutzer verspricht Assoziativität).
Durch die Verwendung von Monoiden können wir die Sparsamkeit nutzen (wir haben es mit vielen spärlichen Matrizen zu tun, bei denen fast alle Werte in einigen Monoiden eine Null sind).
Mit Ringen können wir eine Matrixmultiplikation über andere Dinge als Zahlen durchführen (was wir gelegentlich getan haben).
Das Algebird-Projekt selbst (sowie die Problemhistorie) erklärt ziemlich deutlich, was hier vor sich geht: Wir erstellen viele Algorithmen für die Aggregation großer Datenmengen, und die Nutzung der Struktur der Vorgänge verschafft uns einen Gewinn auf der Systemseite (Dies ist normalerweise der Schmerzpunkt beim Versuch, Algorithmen auf Tausenden von Knoten zu erstellen).
Lösen Sie die Systemprobleme einmal für eine Halbgruppe / Monoid / Gruppe / Ring, und dann können Sie einen beliebigen Algorithmus anschließen, ohne an Memcache, Hadoop, Storm usw. denken zu müssen.
Wie sind Bloom filters
/ hyperloglog
/ countminsketch
wie Zahlen?
Wie kommt es, dass Datenbankaggregationen eine monoidale Struktur haben?
Wie sieht dieses Monoid aus? Haben sie jemals eine Gruppenstruktur?
Literaturhinweise wären hilfreich.
quelle
Antworten:
Sie fragen, warum Datenbankaggregationen eine monoidale Struktur haben.
Fast immer gibt es eine Art von Identität, sei es die Zahl 0 oder 1, die leere Zeichenfolge, eine Identitätsmatrix, eine gleichmäßige Verteilung oder die leere Menge, die von der Operation abhängt. Tatsächlich bilden Daten normalerweise ein Monoid .
Der praktische Punkt, wenn man Daten als Monoid betrachtet, ist, dass sie eine Möglichkeit bieten, Operationen an verschiedenen Arten von Daten unter Verwendung einer gemeinsamen algebraischen Sprache zu diskutieren. Dies führt dann zu generischen Codebibliotheken, die mit beliebigen Monoiden umgehen können, indem einfach eine geeignete Aggregationsoperation als Argument übergeben wird.
Beachten Sie, dass viele Arten von Daten keine Inversen aufweisen, sodass eine Gruppenstruktur zu viel ist, um darauf zu hoffen. Wenn Sie eine Gruppenstruktur haben, werden einige zusätzliche Möglichkeiten zur Manipulation der Daten möglich. Da jedoch weder Matrizen mit Multiplikation noch die positiven Ganzzahlen mit Addition Inversen aufweisen, sind nicht gruppenstrukturierte Daten weit verbreitet.
In der Community für die Zufriedenheit mit Einschränkungen gibt es seit einiger Zeit ein Semiring-Modell für die Datenaggregation. Beachten Sie, dass eine Probleminstanz für die Erfüllung von Einschränkungen eine konjunktive Abfrage über eine bestimmte Datenbank von Fakten ist. Dies ist also ziemlich allgemein: Die meisten praktischen Abfragen über Daten sind konjunktiv.
Der derzeitige Schub der theoretischen Analyse des Semiring-Modells der Datenaggregation wurde 2007 im Kontext der Herkunft eingeleitet . Provenienz ist ein ausgefallener Begriff für das Kommentieren von Daten. Da jedes Datenbanktupel als Anmerkungen angesehen werden kann, die auf eine eindeutige Tupelkennung angewendet werden, kann die Aggregation von Daten nur als Kombination von Anmerkungen angesehen werden. Provenienz ist daher eine Verallgemeinerung der Idee der Datenaggregation, und es wurde ausdrücklich argumentiert, dass das richtige theoretische Modell für die Kombination von Anmerkungen ein Semiring ist. Das allgemeinste Semiring von Provenienzpolynomen ermöglicht es tatsächlich, die gesamte Geschichte zu verfolgen, wie ein Datenelement aus Bestandteilen erhalten wurde. Als Beispiel ein p-WertBei der Analyse einer klinischen Studie kann nachverfolgt werden, wie sie aus den einzelnen Studienergebnissen berechnet wurde. Wenn sich herausstellt, dass einige von ihnen falsch (oder falsch) sind, kann man sie einfach ohne die schlechten Daten neu berechnen.
Es wurden viele weitere Arbeiten mit Semirings durchgeführt, um Daten zu aggregieren, siehe die Papiere, in denen dies zitiert wird .
Aus der unmittelbareren praktischen Perspektive, die Sie zitieren, sehen Sie beispielsweise das GDL-Framework, wie man eine Berechnung effektiv parallelisieren kann, indem man den zugrunde liegenden Semiring-Ausdruck entsprechend gruppiert.
quelle