Запрос из базы данных или из памяти?Что быстрее? - PullRequest
3 голосов
/ 14 февраля 2012

Я пытаюсь улучшить производительность службы Windows, разработанной на C # и .NET 2.0, которая обрабатывает большое количество файлов.Я хочу обрабатывать больше файлов в секунду.

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

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

Для завершения сценария: я использую 64-разрядную версию Windows Server 2008 R2, SQL Server 2008 - это база данных, C # и.NET 2.0, как уже упоминалось.

Прав ли я в своем подходе?Чтобы ты делал?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Эти параметры меняются ежегодно

Да, кэшируйте их в памяти. Особенно если они большие или сложные.

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

Хорошим компромиссом может быть простое их кэширование в течение часа или даже нескольких минут.

1 голос
/ 14 февраля 2012

Доступ к данным в ОЗУ определенно быстрее , чем к любому другому доступу к данным, кроме памяти ЦП, такой как реестры и кэш-память ЦП

Chaching будет быстрее, даже если вы меняете его каждую минуту, так что да, кэширование этого запроса очень быстро

1 голос
/ 14 февраля 2012

Пересечение сети или переход на диск всегда на несколько порядков медленнее, чем при доступе к памяти.

Базы данных могут кэшировать данные в памяти, поэтому, если вы можете этого достичь и не пересекаете сеть, база данных может быть быстрее, так как их шаблоны доступа к данным / индексы и т. Д. Могут быть быстрее, чем ваш код.Но, в лучшем случае - если вам это нужно быстрее, кеши памяти помогут.

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

...