длительные сеансы ravendb - PullRequest
3 голосов
/ 02 апреля 2012

Мы используем RavenDB для нашего сайта.Сайт загружает все свои данные в память (не очень), чтобы иметь возможность обрабатывать огромные нагрузки.Мы загружаем данные в фоновый поток, который регулярно проверяет с помощью БД (RavenDB + sqlserver), присутствуют ли какие-либо новые данные и, если это так, загружает эти данные в память.

Мы пробовали много вещей, чтобы получитьвокруг раздражающего лимита запросов в 30 запросов в RavenDB за сеанс.Поскольку у Raven нет никакого механизма для «сброса» сеанса после того, как мы завершили одну итерацию цикла проверки / загрузки, и поскольку нет способа сообщить Structuremap, мы действительно хотим, чтобы новый сеанс дажехотя мы все еще в том же потоке, что и раньше, мы как бы застряли.

В конце я снова пересмотрел, так что наши репозитории теперь используют RavenSessionProxy, структура структуры которого загружается для нас, что может быть сброшено загрузкойЦикл / fetch (который вручную устанавливает новую сессию документов, когда мы ее сбрасываем).

Это действительно единственный путь?Нет ли в Рэйвене какого-либо механизма, чтобы сказать: «Привет, мистер Сессия, я с вами на данный момент закончил, выровняйтесь и будьте свежими и готовыми в следующий раз, когда я призову вас)» или чтобы сказать Structuremap «Привет, СМ! Следующийраз я прошу у вас IDocumentSession, принесите мне новую, я устал от этой старой "

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

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

1 голос
/ 02 апреля 2012

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

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

...