2012-07-06 53 views
9

我正在写使用PHP /的Symfony2/Doctrine2,只是完成了数据库的设计Web应用程序。我们必须将这些对象(例如Projects,Vendors)导入到我们的数据库中,这些数据库来自各种领域的不同客户。有些客户在项目对象中有2个字段,有些客户有20个字段。所以我在考虑在MongoDB中实现它们,因为它似乎很好用。混合应用程序中的

Symfony2的支持ORM和ODM所以这不应该是一个问题,现在的问题是如何保证这两个数据库中数据的完整性。因为为了完整性问题,我的MySQL数据库中的对象需要以某种方式链接到MongoDB中的对象。

那里有更好的解决方案吗?任何帮助/想法,将不胜感激

+0

请记住,有人会到*操作*在两个不同的数据库大功告成写代码(管理备份,安全补丁等)之后。我不会将第二个数据存储技术引入到项目中,仅仅因为它感觉不错,但只有这样做的好处超过了所有成本。 – 2012-07-06 19:10:01

回答

8

Bulat实施的原则,同时扩展我们在开放天空处理MongoDB的文件和MySQL的记录,这是目前坐在他们(公认过时)的DoctrineExtensions项目fork之间的引用。您需要查看orm2odm_referencesopenskyfork分支。为了在您的项目中使用它,您可能需要将其移植到DoctrineExtensions的新分支,或者将代码简单地合并到您的应用程序中。不幸的是,除了代码本身之外,没有任何文档。

值得庆幸的是,也有cookbook article学说网站,介绍如何从头开始执行此上。基本上,你依赖于一个事件监听器来替换你的属性,使用来自另一个对象管理器的引用(即未初始化的代理对象)以及代理对象的自然行为来延迟加载自己来处理剩下的事情。如果事件侦听器是一个服务,那么可以很容易地将ORM和ODM对象管理器注入到它中。

通过这种模式保证唯一的完整性,试图水合物错误引用,这可能是比你更想通过简单地存储其他数据库的ID和手动查询得到,当您将收到的异常。

+2

这个博客实际上描述了它是如何实现的:http://jwage.com/2010/08/25/blending-the-doctrine-orm-and-mongodb-odm/谢谢! – 2012-07-09 04:10:32

+0

这实际上与我链接的食谱文章的内容相同。 Jon Wage在撰写博客文章后将其交给了文档:) – jmikola 2012-07-09 14:34:38

+0

Yeap我注意到了:) – 2012-07-09 18:57:19

4

因此,我们解决了这个问题的方式是通过移动到Postgres的。 Postgres有一个名为hstore的数据类型,其行为类似于NoSQL列。作品非常甜蜜

UPDATE

现在我回头看,去jsonb代替jsonhstore,因为它可以让你有比键值存储更多的数据结构。