Избыточные словари, моделируемая база данных или физическая база данных? - PullRequest
0 голосов
/ 28 октября 2010

Доброе утро,

В данный момент мне нужна помощь от кого-то более опытного в проблемах с базой данных, чем я.Мне нужно работать с двумя наборами пар (String, Int32).Первый имеет около 160 000 пар, а второй - около 1 620 000 пар.Вопрос в том, что каждая часть строк этой последней коллекции содержится в первом наборе ... В связи с этим я подумал об имитации базы данных в оперативной памяти путем реализации трех словарей:

Dictionary<String, Int32> для хранениястрока и что-то вроде «первичного ключа», Dictionary<Int32, Int32> соединяющего каждый первичный ключ со значением, необходимым Dictionary<Tuple<Int32, Int32>, Int32> для хранения пары первичных ключей и другого значения.

Использование двух словарей и сохранение избыточной информацииПрограмма выделяет около 200 МБ оперативной памяти.Хотя это не ключевой вопрос, я бы хотел уменьшить его.Поэтому я попытался использовать три словаря выше, и, как я и ожидал, выделенная память была значительно уменьшена, примерно до 90 МБ.Однако производительность поиска при поиске по строке была снижена, что заняло примерно вдвое больше времени, чем первый, более простой, но избыточный подход.

Так что теперь я думаю о реализации этого в качестве базы данных SQLite.Проблема во времени поиска: оно должно быть как можно быстрее.Возможно ли использование базы данных такого типа для получения времени поиска, аналогичного времени доступа к ОЗУ?

Большое спасибо.

1 Ответ

0 голосов
/ 28 октября 2010

Возможно. Ваша база данных RAM не обрабатывает ничего, кроме чистых сравнений, так как не имеет структур индекса. Пока вы не даете никакого времени на поиск ... может случиться так, что при правильном использовании одного или двух индексов вы вполне можете превзойти время словаря. Здесь LOT зависит от конкретного поведения запроса и времени выполнения запроса в оперативной памяти. Без этой информации мало что можно сказать.

В целом, определенные структуры данных могут быть намного быстрее, чем общие базы данных. Они менее гибкие, хотя. Действительно зависит от того, как вы получаете данные здесь.

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