I join possono essere parallelizzati?


9

Supponiamo di voler unire due relazioni su un predicato. È in NC?

Mi rendo conto che una prova del fatto che non si trova in NC equivarrebbe a una prova che , quindi accetterei la prova che si tratta di un problema aperto come risposta.PNC

Sono interessato sia al caso generale che a casi specifici (ad es. Forse con una struttura di dati specifica può essere parallelizzato).

EDIT: per portare alcuni chiarimenti dai commenti in questo post:

  • Potremmo considerare un equijoin . Su un singolo processore, un algoritmo basato su hash viene eseguito in e questo è il meglio che possiamo fare poiché dobbiamo leggere ogni setO ( | A | + | B | )A.x=B.yO(|A|+|B|)
  • Se il predicato è una "scatola nera" in cui dobbiamo controllare ogni coppia, ci sonocoppie, e ognuna potrebbe essere in o no, quindi possibilità. Controllare che ogni coppia divida le possibilità a metà, quindi il meglio che possiamo fare è .2 a b O ( a b )|A||B|2abO(ab)

Uno di questi (o un terzo tipo di join) potrebbe essere migliorato per su più processori?logkn


Se questa domanda è motivata da un problema pratico, tenere presente che NC potrebbe non essere la nozione più adatta di "parallelizzabile".
Raffaello

@Raphael: non lo è, ma potresti collegarti a qualcosa sul perché? Posso porlo come una domanda separata se è più appropriato.
Xodarap,

Non è chiaro per me cosa stai chiedendo. Qual è il linguaggio di query del database relazionale di base a cui si sta aggiungendo l'operatore join? Oppure stai chiedendo la complessità delle query che contengono solo operatori di join? Oppure la tua vera domanda è se è possibile eseguire operatori di join "in parallelo" per ottenere una migliore complessità temporale? (simile al modo in cui si dice AND può essere fatto in parallelo) Si noti inoltre che le query SQL (sicure) corrispondono a FOL (Count).
Kaveh,

Oppure stai chiedendo quali sono i più noti limite superiore e inferiore (classi di complessità) sulla complessità che calcola il join dato come input due database relazionali.
Kaveh,

2
@Xodarap: potresti trovare istruttive le risposte e i commenti a questa mia domanda ; So di averlo fatto. Kruskal et al. (1990) è anche una buona lettura.
Raffaello

Risposte:


1

n2(n2)


Se hai intenzione di prendere OR, la profondità sarà logaritmica.
sdcvvc,

@sdcvvc: abbastanza giusto. All'estremo potresti codificare 3SAT nel calcolo relazionale, quindi questo risultato vale davvero solo se le tue selezioni sono semplici (cioè tempo costante).
Xodarap,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.