我正在使用PHP / Symfony2 / Doctrine2编写Web应用程序,并完成数据库的设计。我们必须将这些对象(例如项目,供应商)导入我们的数据库,该数据库来自具有各种字段的不同客户。有些客户在项目对象中有2个字段,有些有20个字段。所以我在考虑在MongoDB中实现它们,因为它似乎很好用。
Symfony2支持ORM和ODM,因此不应该成为问题。现在我的问题是如何确保两个数据库中数据的完整性。因为我的MySQL数据库中的对象需要以某种方式链接到MongoDB中的对象以确保完整性问题。
那里有更好的解决方案吗?任何帮助/想法将不胜感激
答案 0 :(得分:8)
Bulat实现了一个Doctrine扩展,这些记录当前位于fork项目的DoctrineExtensions cookbook article中。您需要查看orm2odm_references
或openskyfork
分支。为了在项目中使用它,您可能希望将它移植到DoctrineExtensions的新分支,或者只是将代码合并到您的应用程序中。不幸的是,除了代码本身之外没有任何文档。
值得庆幸的是,Doctrine网站上还有{{3}},它描述了如何从头开始实现这一点。基本上,您依靠一个事件监听器来替换您的属性与另一个对象管理器的引用(即未初始化的代理对象),并且代理对象的自然行为懒洋洋地加载自己负责其余部分。如果事件监听器是一个服务,您可以轻松地将ORM和ODM对象管理器注入其中。
此模型保证的唯一完整性是,在尝试补充错误引用时会收到异常,这可能比通过简单地存储其他数据库的ID并手动查询而获得的更多。
答案 1 :(得分:4)
所以我们解决这个问题的方法是转移到Postgres。 Postgres有一个名为hstore的数据类型,其行为类似于NoSQL列。效果很好
<强>更新强>
现在我回头看看,请使用jsonb
代替json
或hstore
,因为它允许您拥有比键值存储更多的数据结构。< / p>