【问题标题】:Storing messages of different chats in a single database table将不同聊天的消息存储在单个数据库表中
【发布时间】:2017-02-10 03:05:48
【问题描述】:

我正在开发一个聊天网站。如何存储 2 个不同聊天的消息。是否必须为每个聊天创建一个新表,或者我可以使用一个表来存储所有聊天?

从长远来看(即在搜索期间)是否会影响后一种方法,因为每次用户打开聊天时都会从该表中检索所有消息?

【问题讨论】:

    标签: database chat messages


    【解决方案1】:

    这是我的建议,只使用一个表来存储消息,您将需要更多的表来维护其他相关数据。 也将一对一聊天也视为群聊,唯一的区别是对于最终用户,它仅被视为 1-1。

    以下只是入门的基本结构,实际上您必须添加更多列或更改结构以支持数据同步、读取、传递的收件人、附件等

    Table: User
    Columns: userId, name, image and other user info columns
    
    Table: Group
    Columns: groupId, name
    
    Table: Group_User_X
    Columns: groupId, userId
    
    Table: Message
    Columns: messageId, senderUserId, groupId, content
    

    现在,要为任何给定用户加载消息,您只需加入 Group_User_X 和 Message 表并获取用户所属组的消息。

    如果您需要任何进一步的帮助,可以通过 contact@applozic.com 与我联系

    【讨论】:

    • 非常感谢
    • 我仍然有一个困惑..每条消息的长度可能从一个 HI 到一条长消息..所以我应该为消息内容采用什么数据类型
    • 如果你用的是mysql,可以用文字boolean.co.nz/blog/max-length-for-mysql-text-field-types/135
    • 对了,我用的是oracle 10g
    • 所以,你是说我应该使用大尺寸数据类型,即使它也存储小文本。这似乎浪费了为每条记录分配的内存空间。这个问题有什么解决方案还是我必须采用大尺寸数据类型?
    【解决方案2】:

    聊天应用程序的服务器端数据库

    客户端和服务器之间的数据传输使用单个令牌密钥处理。在这里,服务器端脚本在服务器而不是客户端服务器上运行,以便传递内容(消息)以响应用户设备中执行的操作。

    Server side database architecture

    聊天应用程序的客户端数据库

    该插图解释了服务器通过访问令牌密钥将数据传输到客户端设备的消息传输流程。此外,客户端设备将请求发送到多个服务器以使用客户端令牌密钥访问消息。

    Client side database architecture

    【讨论】:

    • 您链接的图片没有显示任何与数据库或数据库结构相关的内容,而是显示了整个系统的非常非常高级的结构。这不能回答 OP 的问题
    猜你喜欢
    • 2018-09-30
    • 2017-11-02
    • 2013-05-06
    • 2019-07-09
    • 2012-01-11
    • 2013-03-04
    • 2011-10-27
    • 2012-08-30
    • 2014-03-13
    相关资源
    最近更新 更多