0

У меня есть таблица, часто используемая моим сайтом. например, наибольшая из них - это таблица местоположения, в которой хранятся массивные статические данные. Поэтому в любое время пользователи приходят на мой сайт, они ищут в этих местах. Он содержит около 1,5 миллионов строк. Я использую эту таблицу, используя профилировщик памяти, и это почти 500 МБ в памяти. в конечном итоге у меня есть еще несколько статических таблиц, которые мне нужно получить очень быстро, и они статичны. в конце мой дамп памяти получает до 1,5 ГБ памяти. это не проблема для меня, в то время как у меня есть мощный сервер с большим количеством доступной памяти. , но когда я поднимаю этот вопрос, старшие разработчики и архитектуры говорят мне, что я должен пересмотреть свой проект, потому что процесс не должен занимать столько памяти. Но мне нужен быстрый доступ, я не хочу каждый раз запрашивать мою БД. Мне нужен ответ менее 1 сек. То почему память смотрит как дорога для меня. Есть ли рекомендации лучше?Обмен большой объем данных в памяти?

Я использую asp.net и ms SQL 2008. на данный момент Framework 4.0, но скоро будет 4.5. IIS 7.5 на моем веб-сервере.

Я ценю за вашу помощь. спасибо.

+1

Самый масштабируемый способ использует базу данных, 1.5M строк нет ничего. Это никогда не займет больше секунды. –

+0

Если у вас есть доступ к достойному администратору базы данных, поместите свои головы и посмотрите, не придумали ли вы разумный набор индексов - с соответствующей настройкой базы данных вам достаточно легко достичь желаемого порога производительности на 1-2 секунды. Я согласен с Тимом Шмельтером. – bUKaneer

+0

Прошу прощения. Я сделал плохую ошибку. Мне действительно нужно менее 1 секунды. 0,1, 0,2 сек и т. Д. Это я могу использовать память, но не БД. – batmaci

ответ

1

Процесс определенно не должен содержать эту память. Сервер http может захотеть, чтобы процесс выполнялся несколько (тысяч) раз в параллель, и у вас будут проблемы. Теперь это не сказать, что данных не должно быть в памяти. Все данные Google хранятся в памяти большую часть времени. Вам просто нужно быть осторожным, как вы их загружаете.

  1. Если сервер базы данных является хорошим (он должен быть), он фактически сохранит данные в памяти, если они будут часто доступны, или если вы установите соответствующую политику кэширования. Это должно дать вам достойную производительность без необходимости выполнять много работы или каких-либо странных трюков.
  2. Вы можете использовать memcached (то есть путь Google).
  3. У вас могут быть данные в файле с пользовательским форматом, предназначенным для быстрого доступа в вашем конкретном прецеденте, и получить к нему доступ с помощью сопоставления памяти.
0

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

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

Перейдя к такому подходу, вы можете избежать ненужного набора данных в своей памяти. и загружайте то, что хотите, когда захотите. Основная идея строителя доступна на [1].

[1] .http: //www.oodesign.com/builder-pattern.html

Смежные вопросы