Структура данных Отображение памяти или БД? (миллионы предметов)

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

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

Каковы мои варианты?


person Luke Belbina    schedule 08.08.2011    source источник
comment
Обратите внимание, что вам не нужно использовать C# .NET в названии, так как для этого нужны теги.   -  person John Saunders    schedule 09.08.2011
comment
В вашем вопросе нет ничего, что указывало бы на то, что простое хранение их в массиве или списке‹› не будет лучшим решением. Шесть миллионов, как правило, умещаются, все остальное, что вы обдумываете, только сделает это медленнее.   -  person Hans Passant    schedule 09.08.2011


Ответы (2)


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

person Kratz    schedule 08.08.2011

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

Опции:

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

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

person Alexei Levenkov    schedule 09.08.2011