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