我们计划使用PHP for web frontend和MongoDB作为数据库的web项目(会计软件)。此外,iPhone和Android可能会有移动设备,可能还有REST API等等。我们需要使用尽可能多的共享功能在原始数据库(设计模式MVC或MVP中的“模型”)上编写中间层。在这种情况下编写中间层的聪明方法是什么?
我们正在考虑的选项:
1)将中间层写为PHP库。另外:与PHP前端的超级简单连接,但对其他用例(移动aps,REST API ...)不太好。 编辑也不太适合安全和隔离。
2)在MongoDB服务器上将中间层写为server-side executed code。但是它们的限制限制太多(db.eval()写锁定,只有一个碎片)以及它似乎不推荐使用这个MongoDB功能。我一直在寻找扩展服务器端代码执行功能的MongoDB扩展,但没有找到。
3)将中间层写为独立的Web服务,例如在PHP,python或Node.js中。我看到的主要问题 - MongoDB在BSON中进行通信。许多中间层函数都可以进行简单的MondoDB查询。他们不得不重新编码一些其他序列化标准的结果(因为BSON是MongoDB特定的)然后将结果发送给客户端 - 这对我来说似乎很浪费。
除非我们找到更好的解决方案,否则我们可能会选择变体1),但任何建议都会非常感激。
答案 0 :(得分:0)
我会把答案放在Google群组上。
第二点不是真正的服务器端,而是更多的是它在MongoDB附带的内置JS引擎中运行。正如你所说,这将是一种可怕的方式来做到这一点。
第三点不会那么糟糕,使用PHP创建一个单一的入口点,或者使用JSON与它进行通信的东西,而MongoDB的PHP驱动程序将为您完成艰苦的工作,无需担心BSON。然而,它存在巨大的安全漏洞,其中一个是您需要打开一个直接接受MongoDB查询的接口,因此即使“安全”,此接口也会立即成为安全漏洞。
在我看来,由于确定你必须编写自己的库,所以你的第一点也不会更好。相反,我会选择像Kohona或Lithium或Yii这样的PHP框架。这样的事情可能是你最好的选择。
答案 1 :(得分:-1)
我写这是一个答案,因为评论太长了。
关于点 1),显然你不知道PHP是如何工作的,否则你就会知道:
$someOtherDbPackage
。