我正在开发一个网络聊天,我必须决定使用什么策略。我可以使用文本文件或数据库来存储来自和去往用户的数据。
是的,我看过人们在谈论它的其他帖子,但我还有一些问题,而不仅仅是“哪个更快”(这也是我的问题之一,但不是唯一的问题)。我会更仔细地指出问题。
首先,许多用户将共享同一个房间并同时与所有其他人聊天。许多房间将同时开放(同一用户可以同时在两个房间)。
在这个系统中,消息不是唯一来来去去的东西。状态(离开、在线、打字等)、更新(“别跟我说话,我度过了我生命中最糟糕的一天”或“我是新来的”)、退出和登录、回复其他消息,而消息本身就是将要出现的那种流量。某处。
我希望 Javascript 以 JSON 格式接收数据。
我希望这个聊天能够被很多人同时使用!将每 5 或 10 秒发送一次请求。
一些数据肯定会存储在数据库中(用户会话、它的 id、用户的 id、关于房间的信息、它的创建时间等),但是它将如何处理动态数据流仍有待决定。
换句话说,即使它不是有史以来最复杂的聊天,也不是最简单的。
如果选择的策略是文本文件,则文件分发示例: 路径:/root/room/1(到房间 1) 文件:1000001、100002、100003(此房间中的用户)
路径:/root/room/2 文件:1000002、100005、100010
...
来自用户 1000001 在房间 1 中发送的消息和任何其他类型的更新(访问、状态、个人更新等)将保存在路径 /root/room/1/100002(用户 2)和 /root/room/1/100003(用户 3) 等等。
每个用户都会为该房间读取他自己的文件并在读取后将其删除,因此每次他们读取文件时只有新数据会出现在该文件中。
数据以 JSON 格式写入,因此无需进一步编码。
问题:1-考虑到大量数据正在写入和从这些文本文件中读取,最好的选择是什么,使用数据库保存文件然后进行查询(SELECT FROM 消息(以及来自更新和来自访问, 和其他任何东西) WHERE id > #number) 每 5 或 10 秒,对于每个房间中的每个用户,还是使用文本文件?
2- 如果数据库是最好的选择,我应该用 JSON 格式编写它吗?我会使用一个名为 JSON 的字段,因为我不想失去在该数据库中进行查询的能力。或者我可能会创建一个新表,连接用户、房间和 JSON,并在其他表中再次写入以保持元组格式。
3-如果文件是最好的选择,您是否会考虑在每次将数据保存在文件中时复制数据库中的数据(以防万一您想查询或其他)?