10

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

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

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

4

2 回答 2

9

当我们在 OpenSky 工作时,Bulat实现了一个 Doctrine 扩展,用于处理 MongoDB 文档和 MySQL 记录之间的引用,该扩展目前位于他们(公认已过时) DoctrineExtensions项目的分支中。您将要查看或分支。为了在您的项目中使用它,您可能希望将其移植到 DoctrineExtensions 的新分支,或者只是将代码合并到您的应用程序中。不幸的是,除了代码本身之外没有任何文档。orm2odm_referencesopenskyfork

值得庆幸的是,Doctrine 网站上也有一篇食谱文章,描述了如何从头开始实现这一点。基本上,您依靠事件侦听器将您的属性替换为来自其他对象管理器的引用(即未初始化的代理对象),而代理对象延迟加载自己的自然行为会处理其余部分。如果事件侦听器是一项服务,您可以轻松地将 ORM 和 ODM 对象管理器注入其中。

该模型唯一保证的完整性是,当您尝试对错误的引用进行水合时,您会收到异常,这可能比您通过简单地存储另一个数据库的 ID 并手动查询得到的要多。

于 2012-07-06T19:26:12.793 回答
4

所以我们解决这个问题的方法是迁移到 Postgres。Postgres 有一个名为hstore的数据类型,它的作用类似于 NoSQL 列。工作很甜

更新

现在我回顾一下,使用jsonb而不是jsonorhstore因为它允许您拥有比键值存储更多的数据结构。

于 2013-03-06T15:33:55.903 回答