0

StackOverflow を検索しましたが、このディスカッションが見つからなかったので、コミュニティから意見を得るためにここに投稿したいと思います。また、この議論はおそらく他のチームにも当てはまると思うので、これが有用な投稿になることを願っています. これが重複するトピックである場合はお知らせください。削除します。

背景: 私は、現在約 15 年前のかなり大規模な契約ソフトウェア プロジェクトに取り組んでいます。このシステムは、SQL Server データベースと Windows 上で動作する MFC/C++ で記述されたシック クライアントを備えたクライアント サーバー スタイルのアプリケーションです。このアプリケーションの API は、COM に完全にカプセル化されているため、完全にフラットで非オブジェクト指向です。データベースには約 780 のテーブルがあり、アプリケーションには 700 万行を超えるコードがあります。過去 8 年ほどの間にテーブルの大部分が追加され、新しい拡張要求がパイプラインに追加されたため、すぐに速度が低下することはありません。元のアーキテクチャのアプローチは、クラス階層にあるように表されたテーブル/列にすべてを格納することでした。データを永続化するために ORM フレームワーク (Hibernate、Entity など) が正確にどのように機能するか。
過去数年間、私たちのクライアントは、システムが本質的に成長しきれなくなり、COM によって大きく制限されているため、システムを再設計してアプリケーションを完全に書き直したいという要望を表明してきました。システムを再設計して最新化するチャンスがあります。1 つの疑問は、データベースのスケーラビリティについてです。

主な質問: 現在 780 のテーブルがあり、そう遠くない将来に 1000 のテーブルを壊すことが予測されているため、このアーキテクチャ アプローチを使用し続けるか、10 ~ 20 のテーブルを作成してほとんどすべてのデータをXMLとしてのBLOB列? おそらく、700 のテーブルのうち 600 は、たくさんの子供や子供の子供などを持つ片親クラス用です。

私の考え: 私は両方の方法でプログラムを作成しましたが、データを XML として BLOB に格納することでパフォーマンスが大幅に向上すると思います。データを挿入および取得するために何百または何千ものクエリが実行されることはないからです。私の経験から、XML を解析するパフォーマンスは、1000 テーブルのデータベースを処理するよりもはるかに高速です。XML アプローチのもう 1 つの利点は、通常はスキーマを変更する必要がないことです。一方、XML にもパフォーマンスの問題があります。

アイデア、事実、このトピックに関する研究を知っている場合は、投稿してください。すべての情報は役に立ち、高く評価されます。

前もって感謝します!

4

1 に答える 1

2

さまざまなデータベース テクノロジで大規模なデータ システムを扱ってきたので、このタスクには XML を使用しないことをお勧めします。

幸いなことに、SQL Server はもちろん XML データ型をサポートしており、実際には TSQL で XML に対して非常に複雑なクエリを実行できます。そのため、例としてストアド プロシージャを作成するために、アプリケーションに XML を吸い出す必要さえありません。

シリアル化されたデータを XML としてリレーショナル データ ストアに格納する際に私が見た問題:

  1. 遅いです。SQL Server で XML データ型を使用していくつかのテストを実行すると、TSQL で調べると、単に「通常の」データを戻すよりもかなり時間がかかることがわかります。

  2. 冗長すぎます。XML のサイズは、JSON などの形式よりもかなり大きくなります。JSON を使用すると、TSQL でデータをクエリする機能が失われますが、オブジェクトが大きくなると、スペースを節約できます。

  3. SQL Server に XML を格納するレガシー アプリを維持しているときに、頭を壁にぶつけたことは数えきれません。XML を最初にシリアライズ/デシリアライズしたコードが見つからない場合、非常にイライラします。今は問題にならないように思えるかもしれませんが、今後数年で他の新しい開発者をシステムに導入すると、問題になるでしょう。

  4. これは個人的な好みかもしれませんが、最近では誰もデータ ストレージに XML を使用していません。JSON は最新かつ最高です。CouchDB、MongoDB、Elastic Search などのドキュメント データベースはすべて、共通語として JSON を使用しています。最近のツールはすべて JSON も使用しています。それでもオブジェクトを簡単にシリアライズ/デシリアライズすることができ、軽量であり、私の意見では読みにくいものではありません。=)

結論:

少なくとも、ドキュメント データベース (MongoDB、CouchDB、Couchbase、Riak、Elastic Search) を使用することを検討したいと思います。考え方は異なりますが、人生が楽になるかもしれません。

そうでない場合でも、ブロブを使用しますが、代わりに JSON を強く検討します。

これら 2 つが失敗した場合、XML オブジェクトを格納するために SQL Server で XML データ型のみを使用します。

于 2013-06-03T22:37:56.700 に答える