聊天系统的数据库设计
Database design for a chat system
我知道有很多帖子讨论聊天系统的 Db 设计,但他们没有解释任何关于该设计的可扩展性,所以我的问题在这里。
我想设计一个2个或更多用户之间的实时聊天的Db,我们先拿2个用户,这是我想出的。
Table 1:
姓名:用户
字段: id, name
Table 2
姓名:聊天室
字段:id、user1、user2
Table 3:
姓名:消息
字段:Chat_room_id、user_id、消息
考虑到 Facebook,它每月有大约 20 亿活跃用户,假设其中有 10 亿人沉迷于聊天,每个用户发送 100 条消息。
table 中有 1000 亿个条目:消息,所以问题是,
"Will Mysql or Postgres be able to handle this much of entries and show particular chat room messages in real-time ?" 如果不是那么最佳实践应该是什么,我知道这也取决于安装 RDBMS 的服务器,但仍然想知道最佳架构。
PS:我使用 Django 作为后端,AngularJs 用于异步行为
1000 亿行合而为一 table 将永远无法在线工作。不仅应用了所有可能的分区方式来减小尺寸,而且还应用了 active/passive 数据策略的分离。但尽管如此,所有的高材生,答案:
Postgres 本身在处理大数据方面确实很有效。
还有:
Postgres 没有足够有效的策略来对抗糟糕的设计
看看你的例子:table chat_room 在不同的列中列出了两个用户 - 为什么?您在引用 users.id 的消息中有 user_id。你有 chat_room.id 在里面,所以你有用户在 chat_room 中的数据。现在,如果您的想法是预先聚合哪些用户随时间参与 chat_room 或根本不参与,请将其设为一个数组列,例如 (chat_room.id int, users_id bigint[])
或者如果您想要加入时间和离开时间,请添加相应的属性。 active/passive 数据可以使用与活动关系不同的归档 chat_rooms 来实现。顺便说一句,可以对此类存档执行谁参与该聊天室的汇总...
以上不是动作说明,只是表达。数据库模式没有最佳实践。首先明确计划您的聊天将做什么,然后制作数据库模式,尝试,改进,尝试,改进,尝试,改进等等,直到一切正常。如果您担心它如何处理 1000 亿行 - 填写并检查...
我知道有很多帖子讨论聊天系统的 Db 设计,但他们没有解释任何关于该设计的可扩展性,所以我的问题在这里。
我想设计一个2个或更多用户之间的实时聊天的Db,我们先拿2个用户,这是我想出的。
Table 1:
姓名:用户
字段: id, name
Table 2
姓名:聊天室
字段:id、user1、user2
Table 3:
姓名:消息
字段:Chat_room_id、user_id、消息
考虑到 Facebook,它每月有大约 20 亿活跃用户,假设其中有 10 亿人沉迷于聊天,每个用户发送 100 条消息。
table 中有 1000 亿个条目:消息,所以问题是,
"Will Mysql or Postgres be able to handle this much of entries and show particular chat room messages in real-time ?" 如果不是那么最佳实践应该是什么,我知道这也取决于安装 RDBMS 的服务器,但仍然想知道最佳架构。
PS:我使用 Django 作为后端,AngularJs 用于异步行为
1000 亿行合而为一 table 将永远无法在线工作。不仅应用了所有可能的分区方式来减小尺寸,而且还应用了 active/passive 数据策略的分离。但尽管如此,所有的高材生,答案:
Postgres 本身在处理大数据方面确实很有效。
还有:
Postgres 没有足够有效的策略来对抗糟糕的设计
看看你的例子:table chat_room 在不同的列中列出了两个用户 - 为什么?您在引用 users.id 的消息中有 user_id。你有 chat_room.id 在里面,所以你有用户在 chat_room 中的数据。现在,如果您的想法是预先聚合哪些用户随时间参与 chat_room 或根本不参与,请将其设为一个数组列,例如 (chat_room.id int, users_id bigint[])
或者如果您想要加入时间和离开时间,请添加相应的属性。 active/passive 数据可以使用与活动关系不同的归档 chat_rooms 来实现。顺便说一句,可以对此类存档执行谁参与该聊天室的汇总...
以上不是动作说明,只是表达。数据库模式没有最佳实践。首先明确计划您的聊天将做什么,然后制作数据库模式,尝试,改进,尝试,改进,尝试,改进等等,直到一切正常。如果您担心它如何处理 1000 亿行 - 填写并检查...