Как известно, современные средства доступа к данным (iBatis, Hibernate) активно используют кэширование данных в приложении. У меня сильные сомнения по части целесообразности такого кэширования. Часто слышу упреки о том, что я поступаю неправильно, игнорируя такое кэширование.
Мои доводы:
1. Хорошая СУБД, вообще говоря, справляется с кэшированием данных в оперативной памяти не хуже, а, скорее всего, даже и лучше, чем приложение.
2. Кэширование данных в приложении порождает слишком много проблем: приложение не видит изменения, сделанные триггерами или другими приложениями. К примеру, ситуация, когда надо оперативно подправить данные в БД без перезагрузки приложения, встречается очень часто.
3. Кэширование больших объемов данных в ряде случаев может не только не повысить, но даже снизить производительность приложения.
Хотелось бы услышать соображения других людей на сей счет. Проводил ли кто замеры, чтобы проверить, насколько целесообразно использование кэширования данных в приложении с точки зрения производительности?
Ну думаю вам просто опыта не хватает. Все просто.
S>1. Хорошая СУБД, вообще говоря, справляется с кэшированием данных в оперативной памяти не хуже, а, скорее всего, даже и лучше, чем приложение.
Время чаще всего тратится на коннект к БД, создание объектов и проч. К примеру есть таблицы- справочники. Логичнее всего их закешировать сразу на клиенте и не мучить каждый раз БД и сеть для передачи их на клиента.
S>2. Кэширование данных в приложении порождает слишком много проблем: приложение не видит изменения, сделанные триггерами или другими приложениями. К примеру, ситуация, когда надо оперативно подправить данные в БД без перезагрузки приложения, встречается очень часто.
Забудьте про триггеры- сегодня это не модно
По поводу невидимости изменений- кешировать тоже надо уметь. Если все подряд кешировать, то толку конечно мало. Можно только все испортить. Кеширование- очень тонкий инструмент, которым надо уметь обращаться.
Я вообще-то Hibernate не использовал- использовал EJB. Так вот там кеширование повышает производительность в разы.
Здравствуйте, slskor, Вы писали:
S>1. Хорошая СУБД, вообще говоря, справляется с кэшированием данных в оперативной памяти не хуже, а, скорее всего, даже и лучше, чем приложение.
вот только база может находится где-то очень далеко, за Тихим океаном, а не на локальной машине
S>2. Кэширование данных в приложении порождает слишком много проблем: приложение не видит изменения, сделанные триггерами или другими приложениями. К примеру, ситуация, когда надо оперативно подправить данные в БД без перезагрузки приложения, встречается очень часто. S>3. Кэширование больших объемов данных в ряде случаев может не только не повысить, но даже снизить производительность приложения.
кешировать надо наиболее часто запрашиваемые и наименее изменяемые данные, если таковых нет, то кеширование будет только лишней нагрузкой системе