Есть ли хранилище данных, где я могу получить доступ к данным напрямую через индекс массива вместо ключа хеша? Redis? MongoDB? - PullRequest
0 голосов
/ 05 февраля 2012

Мне нужно внешнее (!) Хранилище данных с эффективным использованием памяти C / C ++ для приложения Java, которое не имеет обратной стороны обычного поиска в базе данных (дерево b), но использует мои идентификаторы в качестве индекса массива.Есть ли для этого решение с открытым исходным кодом?Я реализовал это только в C ++ в памяти, но мне хотелось бы иметь опцию «хранилище на диск» в случае сбоя или резервного копирования.Также было бы здорово связать Java.

Например, redis выглядит хорошо, но при чтении документов я вижу, что в общем случае доступ к хеш-ключам, которые имеют O (1) только в теории,можно ли каким-то образом заставить схему хеширования соответствовать индексу хранилища?А также списки не присваиваются, поскольку они реализованы как связанные списки.Или как насчет mongodb?

И да, мне действительно нужен быстрый доступ для чтения (запись может быть "хорошо медленной" :)) - это не преждевременная оптимизация, но если нет альтернативы, я попробую redis раньшекатиться самостоятельноТакже Java не возможна (как я уже говорил: память эффективна;))

Ответы [ 2 ]

3 голосов
/ 05 февраля 2012

При удаленном хранилище значений ключей очень часто преобладают накладные расходы, связанные с управлением сетью и протоколами, а не с самим доступом к данным. Вот почему в эффективных хранилищах значений ключей (например, в Redis) практически все операции имеют одинаковую стоимость.

На странице Redis отметка хорошо иллюстрирует этот момент.

Другими словами, в контексте удаленного хранилища в памяти и с учетом только задержки массив произвольного доступа будет иметь такую ​​же точную производительность, что и хеш-таблица, и даже менее эффективные контейнеры O (log n), такие как красно-черные деревья, би-деревья и т. д. будут совсем близко.

Если вы действительно хотите максимальной производительности, я бы предложил использовать встроенное (т.е. в процессе) хранилище. Например, BerkeleyDB и Tokyo Cabinet предоставляют дисковые контейнеры произвольного доступа для записей фиксированной длины.

0 голосов
/ 05 февраля 2012

KDB - это решение этой проблемы в мире финансовых систем (algo trading).Будьте готовы к тому, что ваш мозг расплавится синтаксисом.Ох, и это не с открытым исходным кодом.

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