我将使用 Django 标签来回答你的问题,因为我在这个环境中工作,但实际上这是一个通用的问题:我想展示类似于 Twitter 上的时间轴,即按时间顺序排列我关注的所有人发布的列表。
我的典型数据库结构如下:
如果我想获取给定用户所有朋友的所有帖子,代码如下(这不是有效的SQL!):
我的典型数据库结构如下:
Table Name: Users
Columns:
UserID PK
EmailAddress
Password
TableName: Friends
Columns:
UserID PK FK
FriendID PK FK
TableName: Posts
Columns:
UserID PK FK
Content
如果我想获取给定用户所有朋友的所有帖子,代码如下(这不是有效的SQL!):
SELECT * FROM Posts WHERE UserID IN (LIST OF "Given user friends' IDs")
这个可以 - 没有问题!然而,这个不具有可扩展性!假设我们有一个繁忙的网站,我们给定的用户有2,000个朋友,并且数据库中有几千万条帖子。在这种场景下,数据库查询将非常低效和缓慢。
像PostgreSQL或MySQL这样的关系型数据库能解决这个问题吗?如果不能,例如Twitter是如何处理的?
join
在一起。让数据库决定最佳的方法。NoSQL数据库适合存储整个文档(例如:一篇文章和所有评论,它们总是一起显示)。通常不适合执行_join_(这是你想要的)。你可能只需要一个_更快_的数据库(更快的硬件、SSD磁盘、大量内存,使大部分数据都适合RAM中...)。并确保你拥有所有正确的索引。你能发一个执行计划吗? - joanolo