我可以将用户名作为文本文件存储在s3中以减少nosql数据库中的冗余吗



我们正在开发一个社交网络应用程序,在我们的NoSQL数据库中有这两个表
Users表

eg:)
{
id: 123,
username: '@frank',
}

张贴表

eg:)
{
_id: 1,
caption: 'My Photo',
imageUrl: 'socialnetwork.s3.com/image.jpg',
username: 'socialnetwork.s3.com/PermanentUserId/username.txt',
userId: 'PermanentUserId'
}

在主页提要中,我们将显示带有用户名和标题的帖子。

为了使用其所有者的用户名获取posts,我们不想将posts表与users表连接起来。

我们也不想将用户名直接存储在posts表中。假设如果用户更改了他们的用户名,我需要在他们的所有帖子中更新。

因此,我们将用户名存储为s3中的文本文件,如socialnetwork.s3.com/PermanentUserId/username.txt

s3中的username.txt文件将具有@frank

我们将调用s3用户名URL来从前端获取实际的用户名。

将来,如果用户更改用户名,我不需要更新posts表中的所有记录。我只需要更新s3中的username.txt。

这是一个好方法吗?

如果我将s3与Cloudfront缓存一起使用,这会扩展到数百万用户吗?

如果这是错误的,还有其他方法吗?

我见过许多系统因糟糕的预先决策而瘫痪,例如使用电子邮件地址作为用户的唯一ID。所以,你现在想到这个真是太好了!

我建议您为每个用户分配一个唯一的ID,然后通过该唯一ID在所有位置引用该用户。该ID不应为其用户名或电子邮件地址。这些将是存储在用户记录中的属性

像DynamoDB这样的NoSQL数据库不允许表之间的连接,因此您需要首先检索用户的唯一ID,然后使用它来查找其他表中的条目。

您可以将AmazonS3视为一个NoSQL数据库(key=filename,value=contents of the object(,但与其像您建议的那样将用户名存储在文件中,它实际上应该只是user表中用户条目的一部分。

最新更新