Domanda

Quali sono le differenze tra una tabella di tipo set e una tabella di tipo ordinato_set? Sono interessato alle differenze nelle prestazioni di lettura/scrittura, su cosa si basa l'ordinamento, gli effetti attraverso i nodi distribuiti e simili.

È stato utile?

Soluzione

L'ordinamento si basa sulla chiave primaria, il che significa che le tabelle ordinate_set sono molto più veloci nel fare iterazione corrispondente/seleziona usando tasti primari complessi. Ad esempio, se il tuo record sembra {{Key, Val1}, Val2}, puoi abbinare o selezionare Key per ottenere molto rapidamente Val1 e Val2 per ogni occorrenza di Key. A parte questo, non sono a conoscenza di una differenza significativa nella velocità di lettura/scrittura.

È anche possibile frammentazione delle tabelle ordinate_set, sebbene significhi che l'iterazione sarà parzialmente ordinata, ma non completamente ordinata. Viene ordinato l'iterazione su un singolo frammento, ma l'ordine dal frammento al frammento è indefinito.

Altri suggerimenti

Per quanto riguarda l'ordinamento dalla fonte:

add_element(E, [H|Es]) when E > H -> [H|add_element(E, Es)];
add_element(E, [H|_]=Set) when E < H -> [E|Set];
add_element(_E, [_H|_]=Set) -> Set;     %E == H
add_element(E, []) ->[E].

Quindi l'ordinamento sembra un confronto dritto <o> sull'elemento.

A parte l'ordinamento, è esattamente lo stesso del set. Quindi rischiare di indovinare che per elementi di sguardi "valore" inferiore sarebbero più veloci in media rispetto al set. Ma a parte questo, non sono sicuro.

Poiché Erlang è agnostico di processo e non consente una modifica variabile, gli effetti tra i nodi distribuiti dovrebbero essere identici ai nodi locali.

Avvertimento:

Non ho eseguito benchmarking sui due tipi, quindi questa è una speculazione da parte mia per quanto riguarda le prestazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top