Haskell'deki bellek içi veri deposu


9

Haskell'de bir web servisi için bir bellek içi veri deposu uygulamak istiyorum. STMMonad'da işlem yapmak istiyorum .

Ben google hash tablo buhar Haskell zaman ben sadece bunu almak: Data. BTree. HashTable. STM.Modül adı ve karmaşıklıkları bu bir ağaç olarak uygulandığını göstermektedir. Bir dizi değiştirilebilir tablolar için daha verimli olması gerektiğini düşünürdüm.

Bir STMhashtable için bir dizi kullanmaktan kaçınmak için bir neden var mı ? Bu buhar karma tablo ile hiçbir şey elde yoksa sadece bir bir buhar ref kullanmalıdır IntMap?


`` TVar IntMap
Daniel Gratzer

@jozefg ne demek istiyorsun?
Simon Bergot

Özür Ah, görünüşe ben oynamamýza çünkü boktan paralelliği alırsınız diyecektim, o geri kalanını kaybetti Store ! blahve Store ! bazardışık olmak zorunda
Daniel Gratzer

"Bir bellek içi veri deposu" derken, asit durumu gibi bir şey mi demek istediniz ?
Ptharien's Flame

@ Ptharien'sFlame Bundan daha basit bir şey arıyorum. Aslında stm monad içinde çalışan basit bir değiştirilebilir harita arıyorum. Bunun için birkaç seçeneğim olduğunu biliyorum ve hangisinin daha iyi olduğunu değerlendirmeye çalışıyorum.
Simon Bergot

Yanıtlar:


1

Doğrudan bir diziye dayalı bir karma tablo uygulaması ile ilgili sorun, bazı işlemlerin kaçınılmaz olarak doğrusal zaman dizisi yeniden boyutlandırma (yani, daha büyük / daha küçük bir dizi oluşturma ve tüm verileri ona kopyalama) gerektirecektir. Bu soruna yaklaşan, Doğrusal Karma veya Guguklu Karma gibi birçok standart algoritma vardır .

Çok uzun zaman önce, Hash Array Mapped Trie adında başka bir algoritma ortaya çıktı, bu da Clojure, Scala ve elbette Haskell ("sıralanmamış kaplar" ve "hamtmap" kütüphaneleriyle) gibi sürekli destek sayesinde işlevsel diller arasında büyük popülerlik kazandı. veri yapıları.

Çok geçmeden , görevinize mükemmel şekilde uyması gereken "stm-container" adlı algoritmaya dayanan STM'ye özel bir kapsayıcı kütüphanesi yayınladım . Ayrıca , kütüphanenin arkasındaki motivasyonu kapsayan ve kriterler sağlayan tanıtım amaçlı bir blog yayınına da göz atabilirsiniz .


Cevabınız için teşekkürler! Paketinizi test etmedim ama ilginç görünüyor. Daha sonra kontrol edeceğim, ancak yayınınıza göre ilk hedefime uyduğuna inanmaya hazırım.
Simon Bergot

1

Referans verdiğiniz uygulama, eşzamanlı bir B-Ağacı uygulamak için bir paketin parçasıdır. HashTable'ın kendisi, Data.Map nesnelerinin bir TVar dizisi olarak uygulanır.

Alıntılanan karmaşıklık değerleri en kötü durumdur . Karma tabloların arama, ekleme ve silme için genellikle en kötü O (N) olduğunu unutmayın. Kepçeler için Harita'yı kullanmak onu O (günlük (N)) değerine getirir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.