ที่เก็บข้อมูลในหน่วยความจำใน Haskell


9

ฉันต้องการติดตั้งที่เก็บข้อมูลในหน่วยความจำสำหรับบริการบนเว็บใน Haskell ฉันต้องการเรียกใช้ธุรกรรมในSTMmonad

เมื่อฉัน google hash table steam Haskellฉันได้รับสิ่งนี้เท่านั้น: Data. BTree. HashTable. STM.ชื่อโมดูลและความซับซ้อนแนะนำให้ใช้สิ่งนี้เป็นทรี ฉันคิดว่าอาร์เรย์ควรมีประสิทธิภาพมากกว่าสำหรับตารางแฮชที่ไม่แน่นอน

มีเหตุผลที่จะหลีกเลี่ยงการใช้อาร์เรย์สำหรับSTMhashtable หรือไม่? ฉันจะได้รับอะไรกับตารางแฮชไอน้ำนี้หรือฉันควรใช้เพียงเตะอบไอน้ำไปยังIntMap?


หมายเหตุหากคุณใช้ `TVar IntMap
Daniel Gratzer

@jozefg คุณหมายถึงอะไร
Simon Bergot

โอ้ขอโทษชัดฉันสูญเสียส่วนที่เหลือฉันจะบอกว่าคุณจะได้รับคู่ขนานเส็งเคร็งเพราะการแก้ไขStore ! blahและStore ! bazจะต้องเป็นลำดับ
Daniel Gratzer

เมื่อคุณพูดว่า "ที่เก็บข้อมูลในหน่วยความจำ" คุณหมายถึงบางสิ่งบางอย่างเช่นสถานะกรดหรือไม่?
Flame ของ Ptharien

@ เปลวไฟของ Ptharien ฉันกำลังมองหาบางสิ่งที่ง่ายกว่านั้นจริงๆ ที่จริงฉันกำลังมองหาแผนที่ที่ไม่แน่นอนที่ทำงานใน stm monad ฉันรู้ว่าฉันมีหลายทางเลือกสำหรับสิ่งนี้และฉันพยายามประเมินว่าตัวเลือกใดดีกว่า
Simon Bergot

คำตอบ:


1

ปัญหาเกี่ยวกับการใช้ตารางแฮชที่อิงโดยตรงกับอาเรย์คือการดำเนินการบางอย่างในนั้นจำเป็นต้องปรับขนาดอาเรย์เชิงเส้นอย่างหลีกเลี่ยงไม่ได้ (เช่นการสร้างอาเรย์ที่ใหญ่กว่า / เล็กกว่าและคัดลอกข้อมูลทั้งหมดไป) มีขั้นตอนวิธีการมาตรฐานหลายตัวที่เข้าถึงปัญหานี้เช่นเป็นเชิงเส้น Hashingหรือนกกาเหว่า Hashing

เมื่อไม่นานมานี้อัลกอริธึมที่ชื่อว่าHash Array Mapped Trieได้รับความนิยมอย่างมากในภาษาที่ใช้งานได้ดีเช่น Clojure, Scala และแน่นอน Haskell (กับไลบรารี "ที่ไม่มีการเรียงลำดับ" และ "hamtmap") เนื่องจากสนับสนุนถาวร โครงสร้างข้อมูล

ไม่นานที่ผ่านมาฉันเปิดไลบรารี่ที่บรรจุในภาชนะเฉพาะของ STMโดยใช้อัลกอริธึมที่ชื่อว่า "stm-container" ซึ่งควรเหมาะกับงานของคุณอย่างสมบูรณ์แบบ คุณสามารถตรวจสอบการโพสต์บล็อกเบื้องต้นที่ครอบคลุมแรงจูงใจที่อยู่เบื้องหลังห้องสมุดและการให้บริการมาตรฐาน


ขอบคุณสำหรับการตอบกลับ! ฉันไม่ได้ทดสอบแพ็คเกจของคุณ แต่มันน่าสนใจ ฉันจะตรวจสอบในภายหลัง แต่ขึ้นอยู่กับโพสต์ของคุณฉันพร้อมที่จะเชื่อว่ามันเหมาะกับเป้าหมายเริ่มต้นของฉัน
Simon Bergot

1

การใช้งานที่คุณอ้างอิงเป็นส่วนหนึ่งของแพ็คเกจสำหรับการนำ B-Tree ที่เกิดขึ้นพร้อมกัน HashTable นั้นถูกนำไปใช้เป็นอาร์เรย์ของวัตถุ TVars ของ Data.Map

ค่าที่ซับซ้อนที่ยกมาเป็นกรณีเลวร้ายที่สุด โปรดจำไว้ว่าแฮชเทเบิลมักจะเป็นตัวพิมพ์ใหญ่ที่สุดของ O (N) สำหรับการค้นหาการแทรกและการลบ การใช้แผนที่สำหรับถังนำลงไปที่ O (log (N))

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.