我最近为一所处理近 200 个表的大学构建了一个相当复杂的数据库应用程序。一些表(例如 Publications)可以保存 30 个或更多字段并存储 10 个一对一的外键关系和最多 2 或 3 个多对多的外键关系(使用交叉引用引用表)。我自始至终都使用整数 ID,规范化一直是每一步的关键。AJAX 是最小的,大多数页面都是标准的 CRUD 表单/流程。
我使用了 Symfony 1.4、Doctrine ORM 1.2、MySQL、PHP。
虽然开发时间和易于维护的好处是巨大的(在使用 MVC 和 ORM 时),但我们一直遇到速度问题。也就是说,当我们有多个用户在任何时候登录并处于活动状态时,应用程序会显着变慢(保存或编辑记录最多需要 20 秒)。
我们目前正在与我们的系统管理员进行讨论,但他们说我们应该拥有足够的权力。当有 6 个或更多用户参与活动时,我们最终会在虚拟服务器环境中排队 4 个 CPU,而内存使用率很低(没有出血)。
当然,我们正在考虑对我们的 mySQL 应用程序进行多线程处理(如果这会有所帮助),优化我们的代码(尽管其中大部分是由 MVC 生成的)并优化我们的缓存使用(这可能会更好,尽管大多数使用的屏幕是用户登录特定和动态的);我们已经安装了 APC,额外的内存,对我们的数据库进行了碎片整理,我已经尝试取消设置所有记录集(虽然我知道这现在在 ORM 中是自动的),发起手动垃圾回收......
但我要问的问题是 mySQL、PHP 和 Symfony MVC 对于开发这种规模的应用程序来说是否真的是一个糟糕的选择?如果是这样,对于这种规模/复杂性的基于 Web 的数据库界面应用程序,人们通常使用/推荐什么?