2013-03-21 7 views
7

Ich bin auf der Suche nach einer persistenten sequentiellen Datenstruktur, die effiziente zufällige Insertionen und Deletionen ermöglicht. Ich fand die folgenden Ausführungen:Clojure finger trees und flexvec

Da gibt es nicht viel Aktivität in clojure.data.finger Baum war In den letzten zwei Jahren, und die anderen sind relativ neu, habe ich mich gefragt, ob jemand Erfahrung hat, irgendwelche von diesen in der Produktion zu verwenden, und ob es Alternativen gibt, die ich übersehen habe.

+0

Warum ist Clojures PersistentVector nicht gut genug? Können Sie Details zu Ihrem Anwendungsfall hinzufügen? – ordnungswidrig

+0

@ordnungswidrig, als Antwort auf Ihre Anfrage für meinen Anwendungsfall: Ich habe ein Dokument, das als ein Array dargestellt wird. Als Reaktion auf Ereignisse wird das Dokument mit Einfügungen und Löschungen an einem bestimmten Offset innerhalb des Dokuments aktualisiert. Normalerweise werden nur ein oder zwei Einfügungen oder Löschungen in einem relativ großen Dokument durchgeführt. Mit Clojures persistenter Vektorimplementierung muss ich das Dokument bei jedem Ereignis neu erstellen. Mit einem Finger-Baum zum Beispiel wäre ich in der Lage, das Dokument entlang der modifizierten Offsets zu teilen und zu verbinden. – Inshallah

+0

Wegen struktureller Aufteilung sollte dies keine großen Kosten verursachen. Oder benötigen Sie Zugang zu den Split-Teilen, z. für die Festplattenpersistenz optimiert? – ordnungswidrig

Antwort

1

Eine andere Implementierung clojure/core.rrb-vector war announced. Da es sich um den clojure github-Account handelt, scheint es, als wäre es die de-facto-Implementierung.

+2

clojure/core.rrb-vector ist nur die flexvec von Michal, die zu einer contrib-Bibliothek wurde. –