Хранение токенов доступа в пользовательской коллекции лучше или раздельно? - PullRequest
0 голосов
/ 02 сентября 2018

Я использую mongodb с python и пытаюсь выяснить, как я должен хранить токены доступа, должен ли я использовать встроенные документы и хранить токены доступа в коллекции того же пользователя или создать новый collection с именем access_tokens и оставить в этом поле ссылки пользователя?

Вот пример с другой коллекцией:

{
    "_id" : ObjectId("5b8bc5efac5a49b53fddb4d6"),
    "name" : "Rohit Khatri",
    "email" : "rohit@email.com",
    "username" : "rohit",
    "password" : "password"
}

{
    "_id" : ObjectId("5b8bdc2aac5a49b82c1f4e32"),
    "token" : "sf33849hskjdfhj9348khsjdf",
    "expires_at" : ISODate("2018-09-02T12:48:42.218Z"),
    "user_id" : {
        "$ref" : "users",
        "$id" : ObjectId("5b8bc5efac5a49b53fddb4d6")
    }
}

со встроенной коллекцией

{
    "_id" : ObjectId("5b8bc5efac5a49b53fddb4d6"),
    "name" : "Rohit Khatri",
    "email" : "rohit@email.com",
    "username" : "rohit",
    "password" : "password",
    "access_tokens": [
        {
            "token" : "sf33849hskjdfhj9348khsjdf",
            "expires_at" : ISODate("2018-09-02T12:48:42.218Z")
        }
    ]
}

Какой способ лучше с точки зрения производительности, масштабируемости и т. Д .?

1 Ответ

0 голосов
/ 02 сентября 2018

Одним приятным побочным эффектом хранения токенов в отдельной коллекции является то, что вы можете использовать индекс TTL для этой коллекции для автоматического удаления старых записей токенов. Индекс не гарантированно будет работать точно в то время, которое вы указали в поле expires_at, но он будет очень близок к этому времени, если точность в секундах для вас не важна. Таким образом, вам нужно будет проверить, существует ли токен, а не истек ли он.

...