Магазин даних в пам'яті в Haskell


9

Я хочу реалізувати сховище даних в пам'яті для веб-сервісу в Haskell. Я хочу проводити транзакції в STMмонаді.

Коли я шукаю парочку хеш-таблиці Haskell, я отримую лише це: Data. BTree. HashTable. STM.Назва модуля та складності підказують, що це реалізується як дерево. Я думаю, що масив повинен бути більш ефективним для змінних хеш-таблиць.

Чи є причина уникати використання масиву для STMхештелю? Чи я отримую що-небудь за допомогою цієї таблиці хеш-пара, або я повинен просто використовувати пара-пара до IntMap?


Зауважте, якщо ви використовуєте `TVar IntMap
Daniel Gratzer

@jozefg, що ти маєш на увазі?
Саймон Бергот

Пробачте, я, очевидно, що я втратив решту цього, я збирався сказати, що ви отримаєте шалений паралелізм, тому що видозмінення Store ! blahі Store ! bazдоведеться послідовно
Daniel Gratzer

Коли ви говорите "сховище даних в пам'яті", ви маєте на увазі щось на зразок кислотного стану ?
Полум’я Птарієна

@ Ptharien'sFlame Я шукаю щось справді простіше, ніж це. Насправді я шукаю просту змінну карту, яка працює в монаді stm. Я знаю, що у мене є кілька варіантів цього, і я намагаюся оцінити, який з них кращий.
Саймон Бергот

Відповіді:


1

Проблема з реалізацією хеш-таблиці, заснованої безпосередньо на масиві, полягає в тому, що для деяких операцій над нею неминуче потрібно буде лінійний розмір масиву часу (тобто створення більшого / меншого масиву та копіювання всіх даних до нього). Існує кілька стандартних алгоритмів, які підходять до цієї проблеми, як, наприклад, лінійний хешинг чи зозуля .

Не так давно з'явився ще один алгоритм на ім'я Hash Array Mapped Trie , який здобув велику популярність у таких функціональних мовах, як Clojure, Scala і, звичайно, Haskell (з бібліотеками "не упорядковані контейнери" і "hamtmap") завдяки підтримці стійких структури даних.

Не так давно я випустив бібліотеку контейнерів, що спеціалізується на STM, на основі алгоритму з назвою "stm-контейнери", який повинен ідеально відповідати вашому завданню. Ви також можете ознайомитись із вступним дописом блогу , що висвітлює мотивацію за бібліотекою та надає орієнтири.


Дякуємо за відповідь! Я не перевіряв ваш пакет, але це виглядає цікаво. Я перевірю це пізніше, але виходячи з вашого допису, я готовий вірити, що він відповідає моїй початковій цілі.
Саймон Бергот

1

Реалізація, на яку ви посилаєтесь, є частиною пакету для впровадження одночасного B-дерева. Сам HashTable реалізований як масив TVars об'єктів Data.Map.

Цитовані значення складності є найгіршими . Пам’ятайте, що хештелі зазвичай є O (N) найгіршим випадком для пошуку, вставки та видалення. Використання Map для відра зводить його до O (log (N)).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.