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
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.
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.
- 1. Riak Knoten Join-Cluster programmgesteuert
- 2. Riak: Wie man Datenverzeichnisse reinitialisiert
- 3. Erlang - Riak Kunden
- 4. Riak unter Windows
- 5. Cassandra vs Riak
- 6. Kann Riak Facettenabfragen machen?
- 7. Wie erstelle ich eine Riak Suchabfrage?
- 8. wie Schlüssel von Geschwistern in Riak
- 9. ejabberd und riak integration configuration
- 10. Riak Konfiguration nicht gefunden ejabberd.yml
- 11. Speicher ein Join Modell
- 12. Stellen Sie Korrektheit in Riak sicher?
- 13. Wie funktioniert ein MYSQL Self-Join?
- 14. Speichern von Daten in Riak als JSON
- 15. Eine einfache Erklärung von Ringen in Riak?
- 16. Riak-TS UseCase vs andere tsdb
- 17. Wie könnte ein INNER/RIGHT/LEFT JOIN 14x langsamer sein als ein FULL JOIN?
- 18. Gibt es trotzdem JS-Bibliotheken in Riak?
- 19. Riak Zurückkehren Status gesperrt, wenn der Schlüssel
- 20. MySQL Query: EIN JOIN LIMITIEREN
- 21. Wie indizieren bestehende nicht-indizierte Daten in Riak Suche?
- 22. ssrs lookup wie ein innerer Join, aber wie wäre es mit einem linken Join?
- 23. Python "Join" -Funktion wie Unix "Join"
- 24. Wie LEFT JOIN mit Inner Join
- 25. Haskell Riak Fahrer: Machen Sie eine einfache Put-Operation
- 26. CRDT ops für Karte in Haskell Riak Client
- 27. Wie benutzt man ein Like mit einem Join in sql?
- 28. wie ein Recht machen join mit LINQ to SQL & C#
- 29. Wie ein Join in Linq zu SQL mit Methodensyntax tun?
- 30. Wie findet man nach einem Attribut durch ein Join-Modell?
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
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