【发布时间】:2017-09-19 06:54:27
【问题描述】:
我知道有很多帖子讨论聊天系统的 Db 设计,但他们没有解释任何关于该设计的可扩展性的信息,所以我的问题在这里。
我想设计一个 2 个或多个用户之间实时聊天的 Db,让我们先以 2 个用户为例,这里是我想出来的。
表 1:
名称:用户
字段:id、名称
表 2
名称:聊天室
字段:id、user1、user2
表 3:
姓名:留言
字段:Chat_room_id、user_id、消息
现在考虑 Facebook,它每月有大约 20 亿活跃用户,假设其中有 10 亿沉迷于聊天,每个用户发送 100 条消息。
在表中产生了 1000 亿个条目:消息,所以问题是,
“Mysql 或 Postgres 是否能够处理如此多的条目并实时显示特定的聊天室消息?”如果不是,那么最佳实践应该是什么,我知道这也取决于安装 RDBMS 的服务器,但仍想知道最佳架构。
PS:我使用 Django 作为后端,使用 AngularJs 进行异步行为
【问题讨论】:
-
看起来设计很差。通常,只要您枚举了列,就可以确定设计存在缺陷。这种情况当然也不例外。
-
是的,你说得对,这是一个糟糕的设计,这是我的问题,在这种情况下,一个好的设计应该是什么样子?
-
除此之外,设想的规模完全不成比例。 Facebook 采用多种架构来管理其数据集。当您的竞争对手技术超越 Facebook 时,我相信您要么足够有钱,可以聘请专业人士为您研究这些问题,要么太富有而无法关心。
-
完全同意你的观点,我不是在竞争 facebook,我是一名学生,所以我想知道我应该使用什么样的技术和工具来完成这项任务,不要假设 1000 亿太多,但让我们拿 1000 万
-
规范化设计可能有一个 chatroom_participants 表,其中包含一个聊天室列和一个参与者列,每个列中输入一个值,并在组合上形成一个 PRIMARY KEY这两列。
标签: mysql postgresql database-design real-time bigdata