Должен ли я кешировать данные превентивно - PullRequest
4 голосов
/ 26 июня 2009

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

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

Мой вопрос заключается в том, должен ли я просто сделать кэш-память недействительной, а затем восстановить ее, когдаследующий клиент подключается, или мне нужно, чтобы процессор устройства предварительно перестроил кеш.Процессор устройства может извлечь текущий кэш, извлекая последнюю запись, добавить новую запись и кешировать новый результат.

Я ценю, что это может быть, это зависит от ответа, но я был бы признателен, если бы услышал собственный опыт людейэта область.

Ответы [ 3 ]

1 голос
/ 26 июня 2009

Я думаю, что вы описываете механизм «предварительной выборки», просто чтобы помочь вам присвоить ему имя. :)

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

Только не забывайте помнить обо всех проблемах кэширования. Как оно становится недействительным при изменении базовых данных и т. Д. Удачи!

1 голос
/ 26 июня 2009

Я не думаю, что вы сможете ответить на этот вопрос, пока не подсчитаете, сколько раз в среднем клиент получает сообщения для данного устройства. Если данное устройство запрашивает сообщения только один раз в синей луне, тогда можно очищать кэш сообщений при каждом запросе клиента. Однако, если очередь сообщений данного устройства запрашивается много раз, то предпочтительным вариантом, вероятно, является упреждающее кэширование при синхронизации устройства; учитывая, что синхронизация устройства происходит реже, чем запросы клиента.

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

0 голосов
/ 26 июня 2009

Я слышал, но это действительно зависит. По многим, многим переменным.

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

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

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