2010-06-16 6 views
7

Sto cercando di memorizzare le immagini in un database NoSQL (< 5 MB) e collegarle agli articoli in un bucket diverso. Che tipo di velocità offre la funzionalità di link walking di Riak? È come un join RDBMS?Riak link-walking come un join?

risposta

11

I collegamenti non sono affatto simili a JOIN (che coinvolgono un prodotto cartesiano), ma possono essere utilizzati per scopi simili in alcuni sensi. Sono molto simili ai collegamenti in un documento HTML.

Con link-walking puoi iniziare con una singola chiave o creare un lavoro di riduzione della mappa che inizia con più chiavi. (Link-walking/traversal è in realtà un caso speciale di riduzione della mappa.) Questi valori vengono recuperati, i loro collegamenti vengono filtrati rispetto alle specifiche (bucket, tag) e quindi i collegamenti corrispondenti vengono passati alla fase successiva (o indietro alla cliente). Naturalmente, tutto ciò avviene in parallelo (a differenza di un JOIN) con un'alta localizzazione dei dati.

Inoltre, il ridimensionamento della mappa non è lento da solo, basta non avere un pianificatore di query sofisticato per svolgere il duro lavoro per voi; devi pensare a come interrogare e organizzare i tuoi dati in merito, se necessario.

7

Pensare alle relazioni unidirezionali e veloci quanto le query normalmente. Non lento come MapReduce.

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

Il primo modo in cui si occupa di Riak questo è con collegamento a piedi. Ogni dato memorizzato in Riak può avere relazioni univoche con altri dati tramite l'intestazione HTTP Link . Nell'esempio canonico di , si conosce la chiave di una banda che è stata memorizzata nel bucket "artists" (i bucket Riak sono come i database o bucket S3). Se l'artista è collegato ai suoi album, che si trovano nella sequenza collegata alle tracce negli album , è possibile trovare tutte le tracce prodotte in una singola richiesta. Come descriverò nella prossima sezione, questo è molto meno doloroso di un JOIN in SQL perché ogni elemento è gestito su in modo indipendente, piuttosto che una tabella a un tempo. Ecco cosa quella query avrebbe simile:

GET /prime/artisti/thebeatles/album, ,/tracce, _, 1 “/ raw” è la parte superiore dello spazio dei nomi URL , “artisti” è il bucket, "TheBeatles" è la chiave dell'oggetto di origine. Quello che segue sono le specifiche di corrispondenza per i quali seguire i collegamenti, nel modulo di bucket, tag, keep triple, dove i caratteri di sottolineatura corrispondono a qualcosa. Il terzo parametro , "keep" dice di restituire i risultati di da quel passaggio, ovvero che è possibile recuperare i risultati da qualsiasi passaggio desiderato, in qualsiasi combinazione. Non so voi, ma a me che si sente più naturale di questo:

tracce SELECT * FROM tracce INNER JOIN album su tracks.album_id = albums.id INNER JOIN artisti ON album.. artist_id = artists.id WHERE artists.name = "The Beatles" L'avvertenza dei collegamenti è che sono intrinsecamente unidirezionale, ma questo può essere superato con poca difficoltà nell'applicazione. Senza vincoli di integrità referenziale nel database SQL (che ActiveRecord ha fatto doloroso in passato), è avete solida garanzia che il vostro cancellazione o l'aggiornamento non causerà una fila per diventare orfani, in ogni caso. Siamo una specie di viziato perché ActiveRecord gestisce il collegamento delle associazioni automaticamente.

Il luogo in cui la funzione di collegamento -walking brilla davvero è in autoreferenziale e profondo transitiva relazioni (si pensi has_many: attraverso writ grande).Dal momento che non è necessario creare una tabella virtuale tramite una JOIN e le versioni alias , puoi facilmente fare cose come social network di amici (amici degli amici), e strutture dati come alberi e liste.

+0

Archiviato nell'intestazione, significa che il collegamento memorizzato nel documento è un collegamento http alla posizione del documento collegato? – tesserakt

+0

Si accede a Riak via HTTP quindi, tecnicamente, sì - il documento è memorizzato sotto un collegamento http. Ma non è necessario percorrere la catena di collegamento per accedere al documento, è possibile accedervi direttamente. – databyte