【问题标题】:Best way to store chat messages and files存储聊天消息和文件的最佳方式
【发布时间】:2012-10-25 04:56:59
【问题描述】:

我想知道您对在数据库中存储聊天消息有何看法?

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

文件也有同样的问题,因为它们可以绑定聊天消息,我也必须将它们存储在数据库中..

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

考虑到我将 PHP 与 MySQL/Doctrine 一起使用,你怎么看?

【问题讨论】:

    标签: php doctrine chat storage message


    【解决方案1】:

    我认为,只要您正确构建数据库,就可以在数据库中存储任何文本信息(名称、消息历史记录等)。我曾在大型网站(每天访问数公斤)和电信公司工作,这些公司将用户信息(包括流量统计数据)存储在数据库中,这些数据库已增长到数百 GB,并且应用程序运行良好。

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

    正如我所说,重要的是你要做几件事:

    1. 正确构建信息结构 - 正确设计数据库非常重要,根据您的性能目标正确地将其划分为表和字段,因为这将构成您的应用程序和查询的基础。弄错了,你的查询会很慢。

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

    3. 创建适当的索引 - 对性能非常重要,尤其是对于大型数据库快速增长的应用程序。

    4. 随着数据的增长衡量查询的性能并寻找改进方法 - 您总会发现必须消除的瓶颈,这是一个持续不断的过程。每个流行的网络应用程序都必须这样做。

    【讨论】:

    • 是的,当然文件不会存储在数据库中,但是有一个存储路径的条目对于存储附加数据并将它们链接到其他实体非常有用。此外,并非所有消息都需要特定条目,因此将“简单消息”重新组合到同一个数据库条目中可能是个好主意。我对数据库设计优化不是特别了解,有相关的链接吗?
    • 这里有一些提示:informit.com/articles/article.aspx?p=27281 和在本演示文稿中:slideshare.net/ronaldbradford/… 您还可以阅读《MySQL 数据库设计入门》书籍中有关存储引擎、表类型、应用程序设计、查询优化的精选章节和优化:从新手到专业 (amazon.com/Beginning-MySQL-Database-Design-Optimization/dp/…) 和高性能 MySQL (shop.oreilly.com/product/9780596003067.do)
    • 好的,谢谢你的链接,但是在优化方面对 Doctrine 有什么看法?使用 ORM 执行高频请求是个好主意吗?我还认为您链接的文档中讨论的许多请求优化都是由 Doctrine 处理的。
    • 不客气。如果您需要从系统中榨取所有性能,最好坚持使用 PDO 并在其之上专门为您的案例编写自己的自定义数据库处理库。它只比原始的 mysql_* 请求慢一点,而 Doctrine 和其他 ORM 会增加很多开销,并且在您需要扩展时会成为瓶颈。 PDO 拥有您需要的一切,包括 mysql_* 函数所没有的准备好的语句。它还支持面向对象的接口。另一方面,使用 PDO,您可以在需要时轻松地从 MySQL 切换到 Oracle。
    • 关于优化,最好自己在“监控”-“发现瓶颈”-“优化”不间断循环中进行,而不是依赖一些第三方解决方案,因为你应该仅实施您的系统所需的那些优化以及何时需要它们,仅此而已。
    【解决方案2】:

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

    【讨论】:

    • 有什么特别的原因吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 2015-12-09
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多