将访问令牌存储在用户的集合中更好还是分开?
Storing access tokens in the user's collection is better or separate?
我正在使用 mongodb
和 python
并试图弄清楚我应该如何存储访问令牌,我是否应该使用嵌入式文档并将访问令牌存储在同一用户的集合中或创建一个名为 access_tokens
的新 collection
并在其中保留用户的参考字段?
这是不同集合的示例:
{
"_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")
}
]
}
哪种方式在性能、可扩展性等方面更好?
将令牌保存在单独的集合中的一个好处是,您可以对该集合使用 TTL index 来自动删除旧的令牌记录。索引不能保证 运行 正好在您在 expires_at 字段中设置的时间,但如果以秒为单位的准确性对您不重要,它会非常接近那个时间。这样你只需要检查令牌是否存在而不是它是否过期。
我正在使用 mongodb
和 python
并试图弄清楚我应该如何存储访问令牌,我是否应该使用嵌入式文档并将访问令牌存储在同一用户的集合中或创建一个名为 access_tokens
的新 collection
并在其中保留用户的参考字段?
这是不同集合的示例:
{
"_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")
}
]
}
哪种方式在性能、可扩展性等方面更好?
将令牌保存在单独的集合中的一个好处是,您可以对该集合使用 TTL index 来自动删除旧的令牌记录。索引不能保证 运行 正好在您在 expires_at 字段中设置的时间,但如果以秒为单位的准确性对您不重要,它会非常接近那个时间。这样你只需要检查令牌是否存在而不是它是否过期。