在数据库中保存“聊天”数据有什么好主意?

时间:2012-03-31 06:59:07

标签: asp.net sql-server-2008

我正在聊天网站上工作。我正在使用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中添加许多朋友作为朋友,那该怎么办?
  • 如果我想在DB中保存每个用户聊天,也一样。我是否应该为所有用户使用一个表聊天记录或其他内容。

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

请告诉我如何设计数据库或给我一些有用的帮助链接。

2 个答案:

答案 0 :(得分:3)

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

  1. 用户A与他的朋友B聊天...一旦聊天窗口关闭,就制作一个文本文件 并将其保存到文件夹结构,如年/月/日,文件名为'userid + user friend id',例如:AB.txt

  2. 每天都要将数据附加到同一文本文件中。因此,将来我们将在一个文件中显示一天内完成的所有聊天。

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

答案 1 :(得分:1)

这一切都取决于您希望如何使用存储的数据。

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

表“用户”:user_id,昵称,姓名,电子邮件,状态,.... table“relation”:user_id1,user_id2,relation_type

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

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

表“messages”message_id,send_by,send_to,timestamp,message_text

并清理早于......的邮件。我想您无论如何都不需要整个历史记录。

关于表现,这是略有不同的事情。数据库旨在处理大量数据,但如果你没有正确地索引它们,那么它将很慢。先完成桌面设计。并考虑稍后索引 - 基于您将执行的查询类型。