2013-03-21 11 views
7

Sto cercando una datastruttura sequenziale persistente che consenta inserimenti e cancellazioni casuali efficienti. Ho trovato le seguenti implementazioni:Clojure finger trees e flexvec

Dal momento che non c'era molta attività in clojure.data.finger-albero negli ultimi due anni, e gli altri sono relativamente nuovi, mi chiedevo se qualcuno avesse esperienza nell'usare qualcuno di questi in produzione e se ci sono alternative che ho trascurato.

+0

Perché PersistentVector di clojure non è abbastanza buono? Puoi aggiungere dettagli sul tuo caso d'uso? – ordnungswidrig

+0

@ordnungswidrig, in risposta alla richiesta per il mio caso d'uso: Ho un documento che è rappresentato come una matrice. In risposta agli eventi, il documento viene aggiornato con inserimenti ed elimina in un determinato offset all'interno del documento. Di solito ci saranno solo uno o due inserimenti o cancellazioni in un documento relativamente grande. Con l'implementazione persistente dei vettori di clojure devo ricreare il documento su ogni evento. Ad esempio, con un albero delle dita sarei in grado di dividere e unire il documento lungo gli offset modificati. – Inshallah

+0

A causa della condivisione strutturata, questo non dovrebbe imporre un costo elevato. O hai bisogno di accedere alle parti suddivise, ad es. per ottimizzato sulla persistenza del disco? – ordnungswidrig

risposta

1

Un'altra implementazione clojure/core.rrb-vector era announced. Dal momento che si trova nell'account github clojure, sembra che sarà l'implementazione di fatto.

+2

clojure/core.rrb-vector è solo la flessione di Michal per essere una libreria contrib. –