Структура данных Memory Mapped или БД?(миллионы предметов) - PullRequest
3 голосов
/ 09 августа 2011

У меня есть структура данных, которая по сути представляет собой поиск некоторых вычислений, которые требуют очень много времени (100 мс) для расчета и должны использоваться снова и снова. У меня есть примерно 6 000 000 таких вычислений, и я хочу загрузить их в память при запуске приложения (я все их предварительно вычислю).

Вопрос в том, могу ли я сохранить это как файл с отображением памяти (словарь чего-либо) или я должен сохранить его в БД, а затем загрузить его в оперативную память при запуске программы? Как быстро будет двоичная сериализация?

Какие у меня варианты?

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

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

2 голосов
/ 09 августа 2011

Вы должны попробовать разные подходы и измерить для себя.Нет другого пути для решения проблем с производительностью.Обратите внимание, что вам нужно иметь в виду какую-то конкретную цель (например, 1 секунду для загрузки / 1 мс для поиска).

Опции:

  • вычислить все значения при запуске и сотре в некотором поиске(предварительно выделенный массив / словарь)
  • вычислять по требованию и sotre в некотором поиске (предварительно выделенный массив / словарь)
  • вычислять заранее и загружать несжатый (обратите внимание, что объем данных у вас большой и будетзанять заметное время загрузки 1-3 секунды)
  • рассчитать заранее и загрузить по требованию
  • рассчитать заранее и загрузить сжатые данные

Я бы рекомендовал попробоватьвычислить все значения при загрузке и посмотреть, достаточно ли быстро это работает - скорее всего, самый простой способ.

...