2010-06-16 8 views
7

Ich möchte Bilder in einer NoSQL-Datenbank (< 5MB) speichern und sie mit Artikeln in einem anderen Bucket verknüpfen. Welche Geschwindigkeit bietet Riaks Link-Walking-Funktion? Ist es wie ein RDBMS Beitritt überhaupt?Riak Link-Walking wie ein Join?

Antwort

11

Links sind JOINs (die ein kartesisches Produkt enthalten) nicht ähnlich, aber sie können in ähnlicher Weise für ähnliche Zwecke verwendet werden. Sie sind Links in einem HTML-Dokument sehr ähnlich.

Mit Link-Walking starten Sie entweder mit einem einzelnen Schlüssel oder Sie erstellen einen Map-Reduce-Job, der mit mehreren Schlüsseln beginnt. (Link-Walking/Traversal ist eigentlich ein Spezialfall von Map-Reduce.) Diese Werte werden abgerufen, ihre Links werden nach Ihrer Spezifikation gefiltert (Bucket, Tag) und dann werden die passenden Links zur nächsten Phase (oder zurück zur Klient). Natürlich wird all dies parallel (im Gegensatz zu einem JOIN) mit hoher Datenlokalität durchgeführt.

Auch Map-Reduce ist nicht langsam von selbst, Sie haben einfach keinen anspruchsvollen Abfrageplaner, um die harte Arbeit für Sie zu erledigen; Sie müssen darüber nachdenken, wie Sie Ihre Daten bei Bedarf abfragen und organisieren.

7

Denken Sie einseitige Beziehungen und so schnell wie Abfragen normalerweise. Nicht so langsam wie MapReduce.

Von: http://seancribbs.com/tech/2010/02/06/why-riak-should-power-your-next-rails-app/

Der erste Weg, die Riak mit beschäftigt, ist diese mit Link-Walking. Jedes in Riak gespeicherte Datum kann über den Link-HTTP-Header zu Beziehungen zu anderen Daten wechseln. Im kanonischen Beispiel, Sie kennen den Schlüssel einer Band , die Sie in der "Künstler" Bucket gespeichert haben (Riak Buckets sind wie Datenbank Tabellen oder S3-Buckets). Wenn der Künstler mit seinen Alben verbunden ist, die in wiederum mit den Titeln auf den Alben verknüpft sind, können Sie alle Titel in einer einzigen Anfrage produziert finden. Wie ich im nächsten Abschnitt beschreibe, ist dies viel weniger schmerzhaft als ein JOIN in SQL , weil jeder Gegenstand unabhängig von statt einer Tabelle bei ein Mal betrieben wird. Hier ist, was die Abfrage würde wie folgt aussehen:

GET /raw/Künstler/The Beatles/Alben, ,/Spuren, _, 1 „/ raw“ ist das obere Ende der URL Namespace, „Künstler“ ist der Bucket, "TheBeatles" ist der Quellobjektschlüssel. Was folgt sind Matchspezifikationen für die folgenden Links, in der Form von Eimer, Tag, halten Tripel, wo Unterstreichungen alles passen. Der dritte Parameter "keep" sagt, dass Ergebnisse von diesem Schritt zurückgegeben wird, was bedeutet, dass Sie Ergebnisse von jedem gewünschten Schritt abrufen können, in beliebiger Kombination. Ich weiß nicht, über Sie, aber mir das fühlt sich natürliche, als dies:

SELECT * FROM Spuren Spuren INNER JOIN Alben ON tracks.album_id = albums.id INNER JOIN Künstler ON Alben.. artist_id = artists.id WHERE artists.name = "Die Beatles" Die Einschränkung von Links ist, dass sie inhärent unidirektional sind, aber diese kann mit wenig Schwierigkeiten in Ihrer Anwendung überwunden werden. Ohne referenziellen Integrität in Ihre SQL-Datenbank (die Active schmerzhaft in der Vergangenheit gemacht hat), Sie haben keine feste Garantie, dass Ihr DELETE oder UPDATE eine Zeile in werden verwaiste, ohnehin nicht verursachen. Wir sind eine Art verwöhnt, weil ActiveRecord die Verknüpfung von Assoziationen automatisch behandelt.

Der Ort, wo der Link-Fuß Funktion ist Beziehungen in selbstreferentiell und tief transitiv wirklich glänzt (man denke has_many: durch groß geschrieben).Da Sie nicht eine virtuelle Tabelle über einen JOIN und Alias ​​verschiedenen Versionen der gleichen Tabelle erstellen können, können Sie einfach Dinge wie soziale Netzwerk-Grafiken (Freunde von Freunden-von-Freunden) tun, und Datenstrukturen wie Bäume und Listen.

+0

Gespeichert in der Kopfzeile, bedeutet dies, dass die im Dokument gespeicherte Verknüpfung eine http-Verknüpfung zum Speicherort des verknüpften Dokuments ist? – tesserakt

+0

Riak wird über HTTP zugegriffen, also technisch, ja - das Dokument wird unter einem http-Link gespeichert. Sie müssen die Link-Kette jedoch nicht durchlaufen, um zu Ihrem Dokument zu gelangen. Sie können direkt darauf zugreifen. – databyte