2017-04-01 1 views
1

Ich benutze die ETS-Tabelle vom Typ ordered_set, und die Zeile sieht wie {{integer_value, string}} aus (im Grunde hat sie keinen Wert, nur Schlüssel).Ist es sinnvoll, `ordered_set` für` select` statement mit `>` `` `` `` `` `` `zu verwenden um die Zeit zu reduzieren complexity

Wenn ich ets:select(tab, [match_spec]) ausführen, werden durch match_spec alle Zeilen ausgewählt, wobei integer_value größer als und niedriger als Comprehensions ist.

Ich frage mich, ob ich davon profitiere und statt die ganze Tabelle zu scannen, finde die untere und obere Grenze in logarithmischer Zeit und dann alle Elemente dazwischen, wie ich es von der SQL-Tabelle erwarte, oder solche Funktionalität ist in ETS nicht implementiert und es gibt keinen besonderen Vorteil bei der Verwendung von anstelle von gewöhnlichen set?

Antwort

1

Einfacher Weg ist mit timer: tc/3 Funktion zum Abrufen der Ausführungszeit Ihrer Funktionen oder ETS-Modul-Funktionen.
Sie können Ihren Code mit fprof oder eprof profilieren, um zu zeigen, welche Funktion aufgerufen wurde und wie viel Zeit für die Ausführung benötigt wird.
Dies kann Ihnen helfen.
Wenn Sie nicht mit Erlang Profiler vertraut sind, kann ich ein einfaches Beispiel für ets set und ordered_set mit Profiler zeigen.

+0

Ich entdeckte bereits (in dem Thema zuletzt aktualisiert in 2011 :)), dass 'Ets' ganze Tabelle scannt, egal was passiert, wann immer es sortiert ist oder nicht. Aber der Kampf um Informationen und "Frische" der Links macht mir Sorgen, wie lebendig Erlang Gemeinschaft und Erlang sich heute ist –

Verwandte Themen