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
- clojure.data.finger-tree (die gezählte-double-Liste Implementierung)
- wgjo.data.cljs
- 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.
Warum ist Clojures PersistentVector nicht gut genug? Können Sie Details zu Ihrem Anwendungsfall hinzufügen? – ordnungswidrig
@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
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