【问题标题】:What is a good idea to save "Chat" data in database?将“聊天”数据保存在数据库中的好主意是什么?
【发布时间】:2012-04-14 18:38:36
【问题描述】:

我正在开发一个聊天网站。我正在使用 asp.net 和 SQL Server 2008

这个想法和普通的聊天网站一样。我的问题是,我不明白如何创建一个好的数据库设计。

我对带有 SQL Server 的 vb asp.net 有很好的了解。

在我的项目中,我创建了一个用于添加新用户的表,其中包含 ID, uName, uPassoworduDetail 列。

然后....我创建了一个名为User_Friends (uName , uFriendName) 的表。

假设当用户“abc”添加新朋友时,它将关系 uName = “abc” 和 uFriendName =“xyz” 保存在此表中,所有其他用户都会这样做添加朋友,所有数据将放在一个表中(User_Friends)。谁是谁的朋友信息的所有详细信息都在这个User_Friends 表中。

我的问题是:

  • 但是如果有 10000 个或更多用户并且每个用户在 DB 中添加许多朋友作为朋友怎么办。
  • 如果我想将每个用户聊天保存在数据库中,也是如此。我应该为所有用户的聊天记录使用一张表还是其他什么。

那么从一张表中获取详细信息是否会是一个缓慢的过程?

请建议我如何设计数据库或给我一些有用的链接以寻求帮助。

【问题讨论】:

  • 通常在 SQL Server 中,您需要良好的数据库设计和良好的索引策略,然后您就可以为每个表处理数以百万计的行 -这肯定不是瓶颈!

标签: asp.net sql-server-2008


【解决方案1】:

将聊天数据保存到数据库是一项占用空间的任务,我希望你这样做:

  1. 用户 A 与他的朋友 B 聊天...一旦聊天窗口关闭,将其创建一个文本文件 并将其保存到文件夹结构中,例如年/月/日,文件名为“用户 ID+用户朋友 ID”,例如:AB.txt

  2. 每天不断地将数据附加到同一个文本文件中。所以将来我们会在一个文件中显示一天内完成的所有聊天。

  3. 添加带有 ID、文件名、创建日期时间的表格聊天记录。检查该文件名是否已存在于数据库中(如果存在)获取该文件并将数据附加到它 否则将具有完全限定路径的行插入数据库并将聊天数据保存到其中

【讨论】:

  • 我觉得这是个好主意。如果我使用访问 .mdb 文件插入文本文件怎么办。
  • 是的,即使这样也能达到目的,但我更喜欢文本文件,因为它很容易打开和处理它不需要太多时间。如果您觉得我帮助您解决了问题,请标记为答案。谢谢
  • 请查看有关相同问题的讨论 .. [链接] stackoverflow.com/questions/9967856/…
  • 但是使用 SQL 服务器也有可能遇到瓶颈,因为您的问题暗示有成千上万的用户
【解决方案2】:

这完全取决于您希望如何使用存储的数据。

对于用户结构,我建议在单独的表中建立关系(朋友、被阻止、...随便),即

table "user": user_id, nick, name, email, status, .... 表“关系”:user_id1、user_id2、relation_type

它更加灵活,因为您不受关系任何一方的用户数量限制,但它也增加了一些复杂性。

关于消息历史,我会将每条消息记录在表格中,例如:

表“消息”message_id、send_by、send_to、timestamp、message_text

并清理早于...的消息。我想你不需要整个历史记录。

关于性能,情况略有不同。数据库旨在处理大量数据,但如果您没有正确索引它们,那么它会很慢。先完成你的桌子设计。稍后再考虑索引 - 基于您将执行的查询类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 2015-01-04
    • 1970-01-01
    • 2011-05-04
    • 2012-08-30
    • 2011-07-13
    • 2012-05-01
    • 1970-01-01
    相关资源
    最近更新 更多