2014-12-22 3 views
1

В настоящее время я создаю хранилище сеансов для ArangoDB (connect-arango). Он работает почти идентично хранилищу сеансов MongoDB (connect-mongo, следовательно, «connect-arango»), но проблема в том, что ArangoDB не имеет встроенного TTL для своих записей.Пользовательский сеанс NodeJS Store, ясные истекшие сеансы

У MongoDB есть это, и это не проблема. Но в ArangoDB я должен сделать это в хранилище сеансов где-нибудь.

Будет ли проверка на истекшие сессии каждые 60 секунд (с использованием setTimeout) достаточной или следует использовать что-то еще, например, проверять каждый раз, когда вызывается функция «получить»?

Я хотел бы использовать запрос AQL, чтобы очистить их, подобно этому:

FOR s IN sessions 
    FILTER s.expires < DATE_NOW() 
    REMOVE s IN sessions 

Если бы пользователь, чтобы очистить его куки, сессия никогда не будет обращаться с помощью функции «получить», что означает, что я не может проверить, истек ли он.

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

Редактировать: Просто никто не понимает, я знаю, как очистить истекшие сеансы, я просто не знаю, как часто запускать ясную функцию (в данном случае это AQL-запрос выше).

ответ

2

Если вы указали индекс skip-list на expires, выполнение указанного выше запроса каждые 60 секунд не должно создавать никаких проблем. Вы также можете создать периодическое задание в ArangoDB, которое запускает этот запрос каждую минуту.

Alan Plum добавила приложение Foxx в приложение для ArangoDB, которое в основном реализует все вышеперечисленное. Я не уверен, что он уже выпустил документацию. Документация API отображается как

localhost:8529/_db/_system/_admin/aardvark/standalone.html#!/sessions 

Если у вас есть какие-либо вопросы по поводу этого приложения Foxx, пожалуйста упал свободно связаться с Аланом хакерами (в) arangodb.org

+0

Как насчет того, чтобы использовать скип-лист, а затем запускать ясный запрос каждый раз, когда кто-то обращается к сеансу, но только если между обращениями было более 60 секунд. Таким образом, он не будет очищаться каждые 60 секунд, когда никто не посещает сайт, скажем, час. У меня нет проблем с истечением сеансов в коллекции, пока они будут очищены в какой-то момент. – Metamist

+0

Этот подход также должен работать, но может задержать запрос, инициирующий GC. – fceller

0

По ArangoDB 2,3 Foxx поставляется со встроенным - в приложении для сессий, которое вы можете использовать в своих приложениях Foxx. Вы можете повторно использовать сеансовое приложение, даже если вы не хотите использовать Foxx.

Вы можете просто установить копию приложения сеансов в точке монтирования по вашему выбору. Это позволяет настроить сеанс TTL, а также другие данные (например, длину идентификаторов сеанса). Приложение предоставляет HTTP API, который позволяет создавать новые сеансы, обновлять сеансы, извлекать существующие сеансы и удалять их. Он автоматически применяет TTL (т. Е. Удаляет истекшие сеансы) при попытке получить или обновить сеанс.

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

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

Раскрытие информации: Я написал новые сессии/приложения для аутентификации, представленные в ArangoDB 2.3.

+0

Я мало знаю о приложениях Foxx, но из того, что я понимаю, это что-то отдельно от NodeJS. Если это так, я бы предпочел не использовать Foxx, так как я разрабатываю этот магазин сеансов для одного из моих других проектов, который написан в NodeJS. – Metamist

+0

Приложения @Metamist Foxx - это, по сути, небольшие веб-приложения, установленные непосредственно внутри ArangoDB, предоставляющие пользовательские конечные точки HTTP. Как я уже сказал, вы можете использовать встроенное приложение сессий, не называя своего собственного приложения Foxx. Он поставляется с предустановленной ArangoDB, поэтому вы можете просто монтировать его (через веб-интерфейс db или из оболочки) и не нужно писать одну строку кода Foxx самостоятельно. Нет никакой пользы в том, чтобы не использовать его, если вы не хотите использовать ArangoDB как немое хранилище REST. –

+0

Для меня нет встроенных веб-приложений, раздел «Доступный» на вкладке «Приложения» пуст. Нужно ли загружать его из github? Я использую последнюю версию ArangoDB, так как я загрузил ее с сайта всего 2-3 дня назад. – Metamist

Смежные вопросы