Php 存储聊天信息和文件的最佳方式

Php 存储聊天信息和文件的最佳方式,php,doctrine,chat,storage,message,Php,Doctrine,Chat,Storage,Message,我想知道你对在数据库中存储聊天信息有什么看法 我需要能够将其他东西绑定到它们(如文件或联系人),使用数据库是目前我看到的最好的方式 同样的问题也出现在文件上,因为它们可以绑定到聊天信息,我也必须将它们存储在数据库中 有成千上万的消息和文件,我想知道性能下降和数据库大小 考虑到我将PHP与MySQL/Doctrine结合使用,您认为如何?我认为像CouchDB或MongtoDB这样的NoSQL数据库是一种选择。您也可以单独存储文件,并通过已知文件名链接它们,但这取决于您的系统体系结构。我认为,如果

我想知道你对在数据库中存储聊天信息有什么看法

我需要能够将其他东西绑定到它们(如文件或联系人),使用数据库是目前我看到的最好的方式

同样的问题也出现在文件上,因为它们可以绑定到聊天信息,我也必须将它们存储在数据库中

有成千上万的消息和文件,我想知道性能下降和数据库大小


考虑到我将PHP与MySQL/Doctrine结合使用,您认为如何?

我认为像CouchDB或MongtoDB这样的NoSQL数据库是一种选择。您也可以单独存储文件,并通过已知文件名链接它们,但这取决于您的系统体系结构。

我认为,如果数据库结构正确,可以在数据库中存储任何文本信息(名称、消息历史记录等)。我曾为大型网站(每天访问数千次)和电信公司工作,这些公司将用户信息(包括流量统计)存储在数百GB的数据库中,应用程序运行良好

但是对于像图像和文件这样的二进制信息,最好将它们存储在文件系统中,并且只将它们的路径存储在数据库中,因为从磁盘上读取它们(将数据库进程与读取一个多兆字节的文件联系在一起)会更便宜

正如我所说,做几件事很重要:

  • 正确地构造信息—正确地设计数据库、正确地将其划分为表以及将表划分为字段非常重要,因为这将构成应用程序和查询的基础。如果你弄错了,你的查询就会很慢

  • 对与每个表相关的表引擎做出正确的决策。这是一个重要的步骤,因为它将极大地影响查询的性能。例如,MyISAM在更新表时阻止对表的读取访问。对于像社交网络或新闻网站这样的web应用程序来说,这将是一个问题,因为在许多情况下,用户基本上必须等待信息更新完成,然后才能看到生成的页面

  • 创建适当的索引—这对性能非常重要,特别是对于具有快速增长的大型数据库的应用程序

  • 随着数据的增长,测量查询的性能并寻找改进的方法-您将始终发现必须消除的瓶颈,这是一个持续不断的过程。每个流行的web应用程序都必须这样做


  • 是的,当然文件不会存储在数据库中,但是有一个条目存储它们的路径对于存储额外的数据并将它们链接到其他实体非常有用。此外,并非所有消息都需要特定的条目,因此最好将“简单消息”重新组合到同一个数据库条目中。我对数据库设计优化不是特别了解,你有相关的链接吗?这里有一些提示:在本演示中,你还可以阅读《MySQL数据库设计与优化:从新手到专业人士》()高性能MySQL()好的,谢谢你的链接,但是你怎么看待优化方面的原则呢?使用ORM处理高频请求是个好主意吗?我还认为,您链接的文档中讨论的许多优化请求都是由条令处理的。欢迎您。如果您需要从系统中挤出每一点性能,最好坚持使用PDO,并在其上专门为您的案例编写自己的自定义数据库处理库。它只比原始mysql_*请求慢一点,而Doctrine和其他ORM会增加很多开销,并且在需要扩展时会成为瓶颈。PDO拥有您所需要的一切,包括mysql_*函数所没有的准备好的语句。它还支持面向对象的接口。另一方面,如果需要的话,使用PDO你可以很容易地从MySQL切换到Oracle。关于优化,最好是自己在“监视器”-“找到瓶颈”-“优化”不间断的循环,而不是依赖于第三方解决方案,因为您应该只实施系统所需的优化,并且在需要时进行优化,而不实施其他优化。有什么特殊原因吗?