私たちはWCF(Entity Frameworkではなく)に基づいてn層システムを構築しており、大規模エンティティの更新を実装する最良の方法について議論しました。 データをクライアントに送信するときに、DTOを作成し、ドメインモデルのデータをtheeseにマップしました。 クライアントは、現在の実装では、同じDTOを使用して変更を加えて戻します。 エンティティの中には80-100のプロパティを持つものもありますが、おそらくクライアントは1つまたは複数のプロパティのみを変更します。 DTO全体にデータを取り込み、それを送り返してから、プロパティが実際に変更されたサーバー側で把握しようとすると、効率が悪いようです。 これを実装するより良い方法はありますか、または「ブルートフォース」メソッドを使用する必要がありますか? 将来的に私たちは非ネットクライアントをサポートする必要があるので、私たちのソリューションを.net固有のものに結びつけたくありません。サービスによる大規模エンティティの更新
答えて
すべてのDTOに変更されたプロパティ名の文字列を含めることで、この問題を解決しました。サービス内の更新コードは、この配列内の名前を持つプロパティの検証と書き込みのみを行います。
コードを簡単にするために、この文字列配列を抽象基本クラスに入れ、そこからすべての「変更可能な」DTOを継承しました。たとえば:DTO多型が、この場合に必要とされていないため
<DataContract>
Public MustInherit Class ChangeTrackableObject
<DataMember> Public Property Changes As HashSet(Of String)
End Class
には<KnownType>
属性はありません。 DataContractSerializer
は継承関係を使用して基本クラスのプロパティを取得します。
このシステムは、.NETおよびJavaクライアントコードからも同様に機能するようです。 Javaクライアントはこれを文字列配列として認識します。私たちは.NETクライアントのための拡張メソッドのライブラリを持っていて、データを簡単に埋め込むことができます。
クライアントがデルタ更新を送信できるようにすることができます。すべてのオブジェクトは、サーバーが管理する固有のGUIDを持つことができます。あなたは、GUIDを使用してオブジェクトを検索し、対応するプロパティを更新することができ、サーバー側では、デルタ
void UpdateProperty(Guid objguid ,
string propertyname , string propertyvalue);
を送信するように
あなたはWCFメソッドを持つことができます。
この方法の問題点は、プロパティの変更が10回ある場合は10回のサービスコールを行うことです。 – SliverNinja
スキーマが大きい場合は、XMLをWebメソッドパラメータとして、オプションの要素を持つXSDとともに使用できます。これは特定のプラットフォームに結びついていません。一意のキー識別子とともに変更された要素を送信することができます。
- 1. 大規模データベーステーブルのグループ化と更新
- 2. 中規模大規模プロジェクトの構造
- 3. 大規模なsqliteデータベースをチャンクで更新する
- 4. Docker swarm - 新規ワーカーを追加 - サービスの規模を変更する
- 5. 大規模なMySQLテーブルの毎日の更新?
- 6. SQL - 大規模なテーブルの更新クエリのパフォーマンス(9億)レコード
- 7. Oracle大規模な単一の更新または小さなバッチの更新?
- 8. 大規模なXMLファイルの更新方法
- 9. 大規模な一括更新MongoDB - forEach()ドキュメント
- 10. Entity Framework 6大規模なテーブル一括更新
- 11. Marklogic:大規模な更新のコンテンツ処理(CPF)を無効にする
- 12. Odoo大規模デプロイ
- 13. 大規模算術
- 14. サーバレス - 大規模アプリケーション
- 15. 大規模マルチテナントプログラマブルCMS?
- 16. のJava:大規模なリスト
- 17. 大規模なグリッドデータセットのストレージ
- 18. 大規模データセットのカーネルメソッド
- 19. 大規模なコミュニティのCMS
- 20. 大規模サイトのベストプラクティス
- 21. 大規模データセットのSQLデータベースクエリパフォーマンスチャート?
- 22. Pythonの大規模なピボットテーブル
- 23. 大規模なデータセットおよびSQL Server
- 24. RESTful WebサービスJSONを使用した大規模データのアップロード/ダウンロード
- 25. RIAサービスを使用した大規模データセットの取得
- 26. Sybase:大規模データベースから小規模データベースへのダンプ/ロード
- 27. インデックス付きビットセットへの大規模な一括更新の最適なアプローチ
- 28. if文によるC++の大規模なパフォーマンスの低下
- 29. 大規模な結果を持つWebサービス
- 30. 大規模なMySQLアップデートクエリ
過度のエンジニアリングを行わないように注意してください。パフォーマンスの問題があることがわかるまでは、パフォーマンスの問題を修正するべきではありません。そうしないと、間違った問題を解決する可能性があります。 –
私も[類似の質問](http://stackoverflow.com/q/1344066/122781)を見つけました。 – HappyNomad