|
|
|
Посоветуйте БД + кэширующая подсистема
|
|||
|---|---|---|---|
|
#18+
dph3Так что иногда имеет смысл делать все-таки ручное кэширование. Не спорю. Я вовсе не против кэширования; я против... того позиционирования, которое видится у топикстартера. Если я правильно понял его отношение, то в итоге собственного написания подсистемы кэширования у него получится специализированная in-memory СУБД, примерно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 00:17 |
|
||
|
Посоветуйте БД + кэширующая подсистема
|
|||
|---|---|---|---|
|
#18+
softwarerdph3Так что иногда имеет смысл делать все-таки ручное кэширование. Не спорю. Я вовсе не против кэширования; я против... того позиционирования, которое видится у топикстартера. Если я правильно понял его отношение, то в итоге собственного написания подсистемы кэширования у него получится специализированная in-memory СУБД, примерно так. Да я понимаю, что ты это и так все прекрасно знаешь ) я против... того позиционирования, которое видится у топикстартера. Если я правильно понял его отношение, то в итоге собственного написания подсистемы кэширования у него получится специализированная in-memory СУБД, примерно так. Угу. При том, что памяти и так мало, а запросы редкие - в результате проблем будет у топикстартера только больше. Особенно когда БД в память не поместиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 03:24 |
|
||
|
Посоветуйте БД + кэширующая подсистема
|
|||
|---|---|---|---|
|
#18+
Вопрос еще, на чем все это писать... Если на Java, то готовое решение - Hibernate + Oscache|Jboss cache ... , все работает именно так как хочет ТС - для разработчика все прозрачно, кеш работает за библиотекой и его в общем-то не видно. Можно насторить кеширование в памяти, на диске, в другой DB... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 22:23 |
|
||
|
Посоветуйте БД + кэширующая подсистема
|
|||
|---|---|---|---|
|
#18+
пролетевший Если на Java, то готовое решение - Hibernate + Oscache|Jboss cacheЧисто из любопытства как кэш узнает что данные поменялись другой сессией и его (кэш) надо бы освежить (по таймауту, триггер в бд посылает сигнал, еще как-нибудь) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 22:34 |
|
||
|
Посоветуйте БД + кэширующая подсистема
|
|||
|---|---|---|---|
|
#18+
SERG1257Чисто из любопытства как кэш узнает что данные поменялись другой сессией и его (кэш) надо бы освежить (по таймауту, триггер в бд посылает сигнал, еще как-нибудь) Явного механизма который бы отрабатывал изменения в базе другими приложениями - нет , кроме как настройки таймера. Для веб приложения, которое только и работает с базой это не актуально, в других случаях кеш может приводить к проблемам. Хотя, если в приложении ТС чтение в сотни раз превышает добавления - для анонимных пользователей например можно и забить на задержку обновления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2009, 23:56 |
|
||
|
Посоветуйте БД + кэширующая подсистема
|
|||
|---|---|---|---|
|
#18+
SERG1257Чисто из любопытства как кэш узнает что данные поменялись другой сессией и его (кэш) надо бы освежить Если у нас не кластер и работа с БД делается через общий код, то в чем проблема? Тот код, что изменил данные - заодно и инвалидировал кэш (общий на виртуальную машину). В Hibernate, подозреваю, это делается вполне себе автоматически. А вообще, для подобных задач есть минимум три принципиально разные стратегии ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2009, 01:02 |
|
||
|
Посоветуйте БД + кэширующая подсистема
|
|||
|---|---|---|---|
|
#18+
DPH3 А вообще, для подобных задач есть минимум три принципиально разные стратегии ;) Попробую угадать Первый - это просто таймер - по прошествии некоторого времени обновляемся Второй - это регистрируемся в базе как подписчик некоего события и при изменении к-л. поля триггер сообщает подписчикам (асинхронно), что данный объект изменен Третий - триггер вставляет запись в change log и подписчики регулярно просматривают свежие сообщения на предмет не задеты ли их закэшированные данные. Если что не учел - напомните. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2009, 02:06 |
|
||
|
Посоветуйте БД + кэширующая подсистема
|
|||
|---|---|---|---|
|
#18+
SERG1257 Первый - это просто таймер - по прошествии некоторого времени обновляемся Второй - это регистрируемся в базе как подписчик некоего события и при изменении к-л. поля триггер сообщает подписчикам (асинхронно), что данный объект изменен Третий - триггер вставляет запись в change log и подписчики регулярно просматривают свежие сообщения на предмет не задеты ли их закэшированные данные. Если что не учел - напомните. Ну, я имел в виду немножко другое. Первый вариант я вообще не рекомендую, уж очень дорогой. Второй - крайне специфичен для конкретного сервера БД, сильно зависит от версии драйверов, потенциально глюкавый. Хотя если связываться не с БД, а с другим app-сервером, то получится классический push (синхронный или асинхронный - это уже детали реализации) Третий - это одна из стандартных реализаций pull (вариантов там кучка). И есть еще checkVersion - это когда у каждой строки (или, лучше, у каждого хранящегося в БД объекта) есть version (с инкрементом на каждое изменение) и при получении данных из кэша проверяется версия (один select по упорядоченному индексу - т.е. мгновенно) и если версии в кэше и в БД не совпали - то инвалидируем. Если совпали - то и хорошо. Впрочем, можно рассматривать это как вариант pull стратегии. По опыту - обычно в проектах требуется как минимум две разные стратегии :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2009, 14:39 |
|
||
|
|

start [/forum/topic.php?fid=35&gotonew=1&tid=1552890]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 159ms |

| 0 / 0 |
