Знаете ли вы о словаре C, который поддерживает транзакции COW? - PullRequest
3 голосов
/ 16 марта 2010

Я ищу библиотеку словаря ключа -> значения, написанную на C, которая поддерживает теоретически неограниченное количество дешевых транзакций.

Я хотел бы иметь один словарь в памяти, с сотнями потоков, начинающих транзакции, возможно, изменяющих словарь, заканчивающих (завершающих) транзакцию или потенциально прерывающих транзакцию. Только 50% времени эти темы действительно изменяют словарь.

Большинство реализаций словарных транзакций, которые я видел, копируют всегда, а не копируют при записи, всякий раз, когда транзакция начинается. Учитывая ожидаемый размер (> 1 ГБ) словаря, я надеюсь найти что-то, что COWs, только когда что-то действительно изменяется во время транзакции. Я также надеюсь на что-то, что упаковано большинством основных дистрибутивов GNU / Linux.

Любые предложения или ссылки очень приветствуются.

Ответы [ 2 ]

1 голос
/ 24 марта 2010

Разве SQLite не является излишним для основных нужд словаря? Обычно, если вы не собираетесь выполнять запросы, накладные расходы на базу данных не нужны.

BDB, безусловно, великолепен, я давно хотел включить его в ряд своих проектов, и определенно похоже, что вы могли бы извлечь выгоду из его повышения производительности.

Самым простым решением, вероятно, было бы создание класса-оболочки (т.е. COWString), который будет реализовывать поведение копирования при записи, а затем создание stl :: map или hash_map объекта-оболочки. Таким образом, вы абстрагируете логику COW от логики контейнера, что также избавит вас от необходимости писать свой собственный класс контейнера и огромные сложности в нем.

1 голос
/ 24 марта 2010

SQLite3 является транзакционным и может существовать полностью в памяти . Это не , как дешево, как это может показаться некоторым, когда дело доходит до транзакций, но не так уж и дорого. Быстрый mlock () / mlockall () не позволяет выгружать БД, YMMV с помощью posix_madvise (). Это не готовое решение, но не слишком сложное для адаптации.

BDB - это еще один вариант, который в настоящее время продается Oracle.

SQLite3 подходит для моих потребностей (почти) идеально. Учитывая, что я заработал значок «Плетеное дерево» , задавая этот вопрос, я по крайней мере могу ответить на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...