我正在将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")
}
]
}
哪种方式在性能,可伸缩性等方面更好?
答案 0 :(得分:0)
将令牌保存在单独的集合中的一个很好的副作用是,您可以在该集合上使用TTL index来自动删除较旧的令牌记录。不能保证该索引会完全按照您在expires_at字段中设置的时间运行,但是如果以秒为单位的准确性对您来说不重要,则该时间将非常接近该时间。这样,您只需检查令牌是否存在,而不是令牌是否已过期。