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

pbwdgjma  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(421)

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

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

posts表

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

在home提要中,我们将显示带有用户名和标题的帖子。
要获取具有所有者用户名的posts,我们不想将posts表与users表连接起来。
我们也不想将用户名直接存储在posts表中。假设用户更改了用户名,我需要在所有帖子中更新用户名。
所以我们将用户名作为文本文件存储在s3中,比如socialnetwork.s3.com/permanentuserid/username.txt
s3中的username.txt文件将包含@frank
我们将调用s3用户名url从前端获取实际用户名。
将来,如果用户更改了用户名,我就不需要更新posts表中的所有记录。我只需要更新s3中的username.txt。
这是个好办法吗?
如果我将s3与cloudfront缓存一起使用,这会扩展到数百万用户吗?
如果这是错的,还有别的办法吗?

4sup72z8

4sup72z81#

我见过许多系统因糟糕的预先决策而瘫痪,例如使用电子邮件地址作为用户的唯一id。所以,很高兴你现在想到了这个!
我建议您为每个用户分配一个唯一的id,然后通过该唯一id在所有位置引用该用户。该id不应是他们的用户名或电子邮件地址。这些将是存储在用户记录中的属性。
像dynamodb这样的nosql数据库不允许表之间的连接,因此您需要首先检索用户的唯一id,然后使用它在其他表中查找条目。
您可以将amazons3视为nosql数据库(key=filename,value=contents of the object),但它实际上应该只是用户表中用户条目的一部分,而不是像您建议的那样将用户名存储在文件中。

相关问题