在应用程序中混合使用MySQL和Mongodb

时间:2012-07-06 19:04:23

标签: mysql mongodb doctrine-orm nosql

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

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

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

2 个答案:

答案 0 :(得分:8)

当我们在OpenSky处理MongoDB文档和MySQL记录之间的引用时,

Bulat实现了一个Doctrine扩展,这些记录当前位于fork项目的DoctrineExtensions cookbook article中。您需要查看orm2odm_referencesopenskyfork分支。为了在项目中使用它,您可能希望将它移植到DoctrineExtensions的新分支,或者只是将代码合并到您的应用程序中。不幸的是,除了代码本身之外没有任何文档。

值得庆幸的是,Doctrine网站上还有{{3}},它描述了如何从头开始实现这一点。基本上,您依靠一个事件监听器来替换您的属性与另一个对象管理器的引用(即未初始化的代理对象),并且代理对象的自然行为懒洋洋地加载自己负责其余部分。如果事件监听器是一个服务,您可以轻松地将ORM和ODM对象管理器注入其中。

此模型保证的唯一完整性是,在尝试补充错误引用时会收到异常,这可能比通过简单地存储其他数据库的ID并手动查询而获得的更多。

答案 1 :(得分:4)

所以我们解决这个问题的方法是转移到Postgres。 Postgres有一个名为hstore的数据类型,其行为类似于NoSQL列。效果很好

<强>更新

现在我回头看看,请使用jsonb代替jsonhstore,因为它允许您拥有比键值存储更多的数据结构。< / p>