我们有一个为孟加拉最大的服装业之一建立ERP系统的项目。
他们大约有20000名员工,其中大约10%的人每个月都会出去/进来。我们是一个有5个PHP开发人员的小公司,在这么大的项目上没有太多的经验。我们之前已经使用Codeigniter/Zend框架和MySQL数据库开发了不同的中小型项目。
对于这个项目,我们决定使用Yii框架和MySQL或PostgreSQL。每天大约有一百万次数据库查询。现在我的问题是,MySQL/PostgreSQL能否处理这种负载,或者是否有更好的替代方案?是否可以使用Yii框架,或者有更好的PHP框架来处理这类应用程序?我们只有5个月的时间来构建工资和员工管理模块。
发布于 2011-05-23 21:09:29
首先,考虑使用PostgreSQL而不是MySQL。您将处理任务关键型数据,通常,您将会意识到这一点:
关于可伸缩性,要注意可伸缩性!=性能。后者是关于使单个请求更快;前者是关于能够处理大量的同时请求,并且通常对后者稍有影响。
对于PHP框架,我从未亲自使用过Yii,所以我不知道它的伸缩性有多好。但是我非常确定Symfony2 (或者Symfony,如果你不喜欢使用测试版软件的话)会有很好的伸缩性:它的主要开发人员在一个主要客户是大中型组织的网络代理机构工作。
发布于 2011-05-24 17:12:58
我认为,Yii会很好地处理(相对)大量的数据。我使用Yii管理130万条记录,其中一些记录每天在一个小虚拟主机上发送更新和数千次查询,性能令人惊叹。
如果您的数据库可以处理这些数据,那么Yii应用程序也将处理这些数据。
您对数据库的选择将是重要的一点。所以@Denis说了一些重要的想法。通过使用MySQL,您可能必须探索/确定适合您需求的存储引擎。
但是,有一些要点,是我在与Yii一起创建一个不断增长的项目时认识到的。你应该考虑这些事情:
-Yii是一个年轻的框架:支持新技术(如ajax),但在某些特殊情况下有点不成熟:很容易在几个小时内生成一个基本的应用程序。由于特殊情况和需求,可能会出现问题。例如:它们对用户输入(HTML表单)有一个很好的验证机制。但在Yii 1.1.6之前,它不支持HTML复选框,从Yii 1.1.7开始,默认情况下支持复选框,但不支持复选框组。另一个问题: Yii总是使用一个表别名,它总是"t“。这可能是一个问题!有时可以定义别名,有时不可以(这是不一致的)。如果您想在MySql中锁定几个表,那么您就遇到了一个问题,因为Yii使用相同的别名"t“调用每个表。因此,您不能通过表名洗劫MySql中的表,也不可能锁定由相同别名调用的两个表。这些都是具体的问题,你可以通过编写纯-> (不使用Yii功能)来解决它们,这是我想说的:框架在大多数情况下都没有帮助。
-Yii很容易扩展。很容易添加自己的扩展或功能。因此,许多这样的“小问题”可以通过编写自己的扩展、小部件或重写方法来解决。
-Yii支持PHP5.2。Yii与5.3兼容,但是(Yii运行在5.3上--我从昨天开始就一直在使用它,它在工作),但是不支持5.3的新特性(也许你需要一个?)PHP5.3将(可能)支持Yii 2.0 -在很远的将来(2012)
-Yii有一个很小(但非常好)的社区。
-there不是专业的支持(你可以发布错误,希望任何人都能修复它-或者你自己修复它)
-Yii是面向对象的PHP。通过处理数据对象来考虑这一点。将大量数据加载到数据对象中是可能的。但请记住,您的应用程序服务器有足够的RAM (但这不是Yii特定的事情)
总之:如果你的应用程序不是很复杂,我喜欢你的应用程序,你会有很多乐趣,最终会是一个漂亮而强大的应用程序。
发布于 2011-05-24 17:23:48
不过,我认为你可能问错了问题。
您有五个月的时间来构建ERP系统。主要关注的问题应该是:
我会质疑性能是否是绝对优先的--它不应该很慢,但许多ERP系统都有点慢。性能优化通常意味着权衡其他优先级-例如,ORM系统提高了开发人员的生产力,但可能比手工制作的SQL慢。
至于可伸缩性-只要你有一个合理设计的模式,我不认为20,000名员工对任何基于像样硬件的现代RDBMS来说是一个很大的挑战。
因此,如果我是你,我可能会选择PostgreSQL,原因正如丹尼斯提到的那样。从来没有用过Yii,但它看起来很合理。我会使用ORM,直到你发现性能确实不可接受的情况。
关键的是,我会组织一个测试框架,允许您在开发周期内监视性能和可伸缩性(为此我使用JMeter ),并且只有在确实必要时才进行性能优化。在你知道有问题之前,牺牲所有其他的东西--特别是生产力和可维护性--在你知道你有问题之前,往往会创造出过于复杂的解决方案,而它们又往往会有更多的安全问题和维护挑战。
https://stackoverflow.com/questions/6095751
复制相似问题