10

PHP / Symfony2 / Doctrine2を使用してWebアプリケーションを作成し、データベースの設計を完了しています。さまざまなフィールドを持つさまざまな顧客からのこれらのオブジェクト(プロジェクト、ベンダーなど)をデータベースにインポートする必要があります。プロジェクトオブジェクトに2つのフィールドがある顧客もいれば、20のフィールドがある顧客もいます。それで、MongoDBの良い使い方のように思えるので、それらをMongoDBに実装することを考えていました。

Symfony2はORMとODMの両方をサポートしているので、問題はありません。今、私の質問は、両方のデータベースのデータの整合性を確保する方法です。整合性の問題のために、MySQLデータベース内のオブジェクトをMongoDB内のオブジェクトに何らかの方法でリンクする必要があるためです。

そこにもっと良い解決策はありますか?任意の助け/考えをいただければ幸いです

4

2 に答える 2

9

Bulatは、OpenSkyにいる間に、MongoDBドキュメントとMySQLレコード間の参照を処理するためにDoctrine拡張機能を実装しました。これは、現在DoctrineExtensionsプロジェクトの(明らかに時代遅れの)フォークにあります。またはブランチのいずれかを確認する必要があります。これをプロジェクトで使用できるようにするには、DoctrineExtensionsの新しいフォークに移植するか、単にコードをアプリケーションに組み込むことをお勧めします。残念ながら、コード自体以外にドキュメントはありません。orm2odm_referencesopenskyfork

ありがたいことに、DoctrineのWebサイトには、これを最初から実装する方法を説明したクックブックの記事もあります。基本的に、イベントリスナーを使用して、プロパティを他のオブジェクトマネージャーからの参照(つまり、初期化されていないProxyオブジェクト)に置き換えます。残りは、プロキシオブジェクトが遅延ロードするという自然な動作によって処理されます。イベントリスナーがサービスである場合、ORMとODMの両方のオブジェクトマネージャーを簡単に挿入できます。

このモデルによって保証される唯一の整合性は、不正な参照をハイドレイトしようとしたときに例外を受け取ることです。これは、他のデータベースのIDを保存し、手動でクエリを実行した場合よりも多くなります。

于 2012-07-06T19:26:12.793 に答える
4

したがって、この問題を解決する方法は、Postgresに移行することでした。Postgresには、NoSQL列のように機能するhstoreと呼ばれるデータ型があります。かなり甘い作品

アップデート

振り返ってみると、Key-Valueストアよりも多くのデータ構造を持つことができるので、jsonb代わりに、jsonまたはを使用してください。hstore

于 2013-03-06T15:33:55.903 に答える