php - 我应该在 PHP/MySQL 中存储序列化对象还是 JOIN 表?

标签 php mysql performance

我目前正在构建一个为用户提供大量排序选项的网站,我希望以一种可以轻松扩展的方式构建它。当然,这两种技术各有优缺点,但我想听听您的意见。

1) 将序列化的 json 数组存储在单个列中。当添加或删除新条目时,将对 json 进行解码,然后对数组进行操作,然后在数据库中重新编码和更新。数据将在 PHP 站点上使用数组排序函数进行排序,或者在某些情况下,MySQL 的“IN”将用于根据 ID 列表选择条目。

这种方法的主要问题是增加了开发时间,以及将自己编码逼入绝境的风险。如果 json 字符串需要更改,或者我想添加一个新功能,那可能会非常痛苦。我也不知道这将如何在负载下执行,总是为每个用户选择并更新一个大的 json 字符串。

2) 为每个新条目及其与用户/条目的关系执行插入的经典 RDBMS 方法。然后使用 JOIN 选择退出。将仔细设置索引,并使用 EXPLAIN 来确保每个 JOIN 选择都被优化。

关于摆脱 RDBMS 的讨论很多。但这种说法通常来自拥有数百万用户的网站。这样做的好处是开发会很快,如果将来需要添加新数据,更改表也很容易。

我是否应该在首次编写应用程序时担心规模问题?还是我应该专注于产品,尽早发布,并随时调整规模?

最佳答案

我认为您现在不应该担心这一点,如果您不知道无论如何都必须优化您的应用程序的规模。

解决方案 1) 听起来不太好。如果您想使用类似的东西,您真的应该使用像 CouchDB 这样的非关系数据库。 (我今天刚刚为它找到了一个 nice tutorial)因为它会立即存储 JSON(并且您可以使用 JavaScript 中定义的 View 对其进行排序和选择)。它不仅适用于拥有数百万用户的网站(尽管它确实很容易扩展)。您应该自己尝试一下,不要考虑周围的所有“嗡嗡声”和反“嗡嗡声”,而只是看看它是否对您的应用程序有用。

也许您应该只使用 RDBMS。它们仍然非常快(好吧,如果你有 Facebook 50TB 的收件箱数据来组织和搜索,你可能会遇到麻烦)并且你会惊讶于正确定义的索引可以为性能做些什么。并且有大量的 RDBMS 知识和良好的工具,因此非常易于使用。

在设计良好的应用程序中,恕我直言,无论如何您都应该能够轻松切换底层数据库实现。

关于php - 我应该在 PHP/MySQL 中存储序列化对象还是 JOIN 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2306831/

相关文章:

c++ - 从 GPU 复制到 CPU 比从 CPU 复制到 GPU 慢

python程序很慢

php - 如果存在 MySQL

mysql - 多对多关系的单个 SQL 查询

php - 页面刷新时丢失语音标记

mysql - 是否规范化数据库?只读 MyISAM 表,性能是主要优先级(MySQL)

php - mysql,从表单数据构建长的 sql 查询。 (php)

performance - 为什么我的 localhost HTTP 响应时间这么慢?

php - 在 PHP 中链接一个新的对象实例

php - 更新 Ubuntu 服务器错误后与 apache 一致