我应该在PHP/MySQL中存储序列化对象还是连接表?

我应该在PHP/MySQL中存储序列化对象还是连接表?,php,mysql,performance,Php,Mysql,Performance,我目前正在建设一个网站,为用户提供了很多排序选项,我想以一种可以扩展的方式来构建它,而不需要太多的麻烦。当然,这两种技术都有折衷之处,但我想听听你的意见 1) 将序列化的json数组存储在一列中。当添加或删除一个新条目时,json被解码,数组被操作,然后在DB中重新编码和更新。数据将在PHP的站点上使用数组排序函数进行排序,或者在某些情况下,MySQL的“in”将用于根据ID列表选择条目 这种方法的主要问题是增加了开发时间,以及将自己编码到一个角落的风险。如果json字符串需要更改,或者我想添加

我目前正在建设一个网站,为用户提供了很多排序选项,我想以一种可以扩展的方式来构建它,而不需要太多的麻烦。当然,这两种技术都有折衷之处,但我想听听你的意见

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

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

2) 经典的RDBMS方法是为每个新条目及其与用户/条目的关系进行插入。然后使用JOIN选择out。索引将被仔细设置,解释将被用来确保每个连接选择都被优化

已经有很多人在谈论如何从RDBMS中脱离出来。但这种说法通常来自那些拥有数百万用户的网站。这样做的好处是开发速度很快,如果将来需要添加新数据,修改表也很容易


当我第一次编写应用程序时,我是否应该担心规模?或者我应该专注于产品,尽早发布,并在前进的过程中调整规模?

如果您不知道优化应用程序所需的规模,我认为您不必担心这一点

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

也许你应该使用RDBMS。它们仍然非常快(如果你像Facebook一样需要组织和搜索50TB的收件箱数据,那么你可能会遇到麻烦),你会惊讶于一个正确定义的索引能为性能做什么。而且有很多RDBMS知识和好的工具,所以它很容易使用

在设计良好的应用程序中,您应该能够轻松地切换底层数据库实现