2009-04-10 8 views
5

Würde jemals ein erfahrener Erlang-Programmierer association lists über Datensätze empfehlen?Ist es immer eine gute Idee, Assoziationslisten anstelle von Datensätzen zu verwenden?

Ein Fall kann sein, wo zwei (oder mehr) Knoten auf verschiedenen Maschinen Nachrichten austauschen. Wir möchten die Software auf jeder Maschine unabhängig aktualisieren können. Bei einigen Upgrades kann ein Feld zu einer (oder mehreren) der gesendeten Nachrichten hinzugefügt werden. Es scheint, als würde ein Datensatz als Nachricht verwendet werden, was bedeutet, dass Sie das Upgrade auf beiden Rechnern immer im Sperrschritt durchführen müssen, damit das Empfängerfeld den Datensatz nicht ignoriert. Während, wenn Sie so etwas wie eine Assoziationsliste verwendeten (die immer noch eine "record-like" API hat), würde der noch nicht verbesserte Empfänger die Nachricht immer noch erfolgreich empfangen und das neue Feld einfach ignorieren. Mir ist klar, das ist nicht immer das gewünschte Verhalten, aber oft ist es. Nehmen Sie außerdem an, dass die Nachrichten ziemlich klein sind, so dass die Nachschlagezeit keine Rolle spielt.

die oben Unter der Annahme, macht einen Sinn, ich habe folgende weitere Fragen:

  • Gibt es einen Standard (oder weit verbreitet) Bibliothek für Alists? Etwas triviales Googeln ergab nichts.
  • Gibt es andere Fälle, in denen Sie eine Assoziationsliste (oder etwas Ähnliches) verwenden würden?

Antwort

5

Sie haben grundsätzlich drei Möglichkeiten:

  1. verwenden, um Datensätze
  2. Verwenden Verband Listen (Maker proplists)
  3. Verwenden Kombination

I Aufzeichnungen verwenden, bei denen die Wahrscheinlichkeit, dass es zu ändern ist sehr gering . Auf diese Weise bekomme ich das passende Muster und beschleunige das, was ich möchte.

Ich verwende proplists wo ich Hashtable wie Funktionalität brauche. Ich bekomme Flexibilität auf Kosten von Mustererkennung und Geschwindigkeit.

Und manchmal benutze ich beide. Ein Datensatz mit einem Feld, das eine Proplist ist. Auf diese Weise kann ich einen Teil des Musters anpassen und trotzdem flexibel sein, wo ich es brauche.

Alle drei Optionen haben unterschiedliche Kompromisse, so dass Sie im Grunde nur Ihre speziellen Bedürfnisse zu bewerten und eine Wahl treffen müssen. Es kann einige Prototypen erfordern und herumspielen, um herauszufinden, welche Kompromisse sinnvoll sind und welche Features Sie unbedingt haben müssen.

3

Beachten Sie, dass listsearch/3 ziemlich "assq" ist.

5

Für eine kleine Anzahl von Schlüsseln können Sie Listen verwenden, die auch als proplists bezeichnet werden, für größere sollten Sie dict verwenden. In beiden Fällen besteht der größte Nachteil darin, dass Sie die Musterübereinstimmung nicht so verwenden können, wie sie für Datensätze verwendet wird. Es gibt auch eine Geschwindigkeits-Strafe, aber es ist in den meisten Fällen irrelevant.

+0

+1 für das Modul proplists. Was das Diktat anbelangt, so hatte ich wirklich noch nicht viel Bedarf dafür, aber ich nehme an, dass ich versuche, meine Proplisten so klein wie möglich zu halten. –

Verwandte Themen