Хранение большого количества объектов различного размера на диске - PullRequest
2 голосов
/ 04 ноября 2008

Мне нужно разработать систему для хранения большого количества (от 10 до 100 тысяч) объектов. Каждый объект похож на электронную почту - здесь есть основное текстовое тело и несколько вспомогательных текстовых полей ограниченного размера. Размер тела будет от нескольких байтов до нескольких килобайт.

Каждый элемент будет иметь один уникальный идентификатор (вероятно, GUID), который его идентифицирует.

Хранилище будет записано только тогда, когда к нему добавлен объект. Это будет часто читаться. Удаление будет редким. Данные представляют собой почти весь читаемый человеком текст, поэтому они легко сжимаются.

Система, которая позволяет мне выполнять операции ввода-вывода и управлять памятью и кэшированием, была бы идеальной.

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

Система управления данными должна быть частью моего приложения - я не хочу зависеть от служб ОС. Или отдельно установленные пакеты. Native (C ++) был бы лучшим, но управляемый (C #) был бы в порядке.

Я считаю, что база данных является очевидным выбором, но она должна быть супербыстрой для поиска и загрузки в память объекта. У меня нет опыта работы с технологиями баз данных, и я обеспокоен тем, что общие реляционные системы не будут эффективно обрабатывать все эти данные переменного размера.

(Обратите внимание, это не имеет ничего общего с моей работой - это личный проект.)

По вашему опыту, каковы жизнеспособные альтернативы традиционной реляционной БД? Или для этого хорошо подойдет БД?

Ответы [ 7 ]

2 голосов
/ 04 ноября 2008

Посмотрите на SQLite , он имеет привязки для многих доступных языков программирования и сред и, как и Berkeley DB , является базой данных на диске без необходимости установки механизма базы данных.

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

2 голосов
/ 04 ноября 2008

Я бы попробовал PFS: http://blog.sensenet.hu/post/2008/05/Portal-File-System-(PFS)-an-open-source-content-repository-for-Net.aspx

Жаль, что вы находитесь в c / .Net, так как Jackrabbit был бы идеальным выбором.

1 голос
/ 04 ноября 2008

Вы действительно не указываете, как вы будете искать эти данные. Я проделал аналогичную работу с некоторыми приложениями для анализа текста, в которых основные данные хранятся в MySQL, но я поддерживаю индекс текстового поиска в Ferret (проект находится в Ruby), чтобы найти соответствующую строку в таблице сообщений на основе поиска по ключевым словам. Я думаю, что этот гибридный подход может работать и для вас. SQLServer и Lucene.Net могут хорошо работать для вас в среде C #. Я уверен, что если вы посмотрите вокруг, то сможете найти похожие решения в пространстве C ++.

Я не рекомендую использовать полнотекстовый поиск SQLServer - Lucene и его деривации кажутся намного лучшим выбором.

Я думаю, что вам повезет больше с любым решением для БД по сравнению с решением на основе файлов. Практически любая современная база данных должна быть в состоянии удовлетворить ваши требования к данным, по крайней мере, в пространстве. Построение индексов для вашего большого поля - это другой вопрос, и поэтому я бы порекомендовал подход к анализу текста, если вам нужен поиск по нему.

0 голосов
/ 11 августа 2009

Вы смотрели на db4o или Карвонит ?

0 голосов
/ 04 ноября 2008

Взгляните на Взгляд .

0 голосов
/ 04 ноября 2008

Может быть, вам стоит подумать о WebDav-сервере, таком как Apache + mod-dav. Это сохранит содержимое и метаданные на диске. Для поиска вы можете разместить существующую поисковую систему поверх этого сервера WebDav, например, Lucene.

Таким образом вы минимизируете собственную разработку и начинаете с мощного набора функций.

0 голосов
/ 04 ноября 2008

Похоже на то, для чего была разработана Berkeley DB. Однако я этим не пользовался.

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