4

過去に、私のデータベースのニーズはすべて sqlite によって解決されました。現在、潜在的に大きくなる可能性のあるデータベースを設計しており、「分散トランザクション」を調べました。それをどのようにプログラムしますか?分散トランザクションとは何かを説明する結果がいくつか見つかりましたが、それをプログラムする方法は説明されていません。

私はコードで、より大きなトランザクションにバッチ処理したいトランザクションがいくつかあることを知っています。私は.NETを使用しています。PK が 1 つのデータベースにあり、名前や設定などのユーザー情報が別のデータベースにあるユーザーを作成するにはどうすればよいでしょうか。これは別の質問かもしれませんが、2つの機能がある場合。1 つはメディアの説明を更新し、もう 1 つは同じサーバー上または別のサーバー上にあるコンテンツを更新します。これらのトランザクションをネストし、最後にのみコミットする方法を教えてください。

4

2 に答える 2

5

概念の概要については、Wikipediaを参照してください。

.NET で使用する場合は、System.Transactions名前空間、特にTransactionScopeクラスを確認してください。これにより、 DTCの使用にフックできるようになります。プロジェクトを見ると、System.Data.SQLiteDTC と SQLite がどのように統合されているかがわかります。

于 2009-12-12T08:56:31.810 に答える
4

あなたが説明したアプローチは、パフォーマンスの問題につながる可能性があります。各リクエストには、複数のデータベースを含むトランザクションが必要です。それは費用がかかります。たとえば、Web サービス呼び出しと DB 要求を同じトランザクションに含める必要がある場合は、分散トランザクションが適切なソリューションとなる可能性があります。

将来、高負荷時のパフォーマンスを向上させるためにスケーラビリティが必要になる場合は、クラスタリングを検討してください。単一のユース ケースの一部を異なるサーバーに分散する代わりに、単純な (分散されていない) トランザクションを実行します。また、さまざまなリクエストがさまざまなサーバーで処理されるため、スケーラビリティの利点があります。

クラスタリングの主な目的と、さまざまな状況での適用可能性については、さまざまな意見があります。ドメインに依存するため、慎重な分析が必要だと思います。クラスタリングに関するいくつかのリンク: Neil McAllister による データベースクラスタリング、MSCS を使用した SQL Server 2000 データベース クラスタリングの概要(古い)、 Wikipedia のクラスタリング (コンピューティング) 、およびクラスタリング アルゴリズム- 一般的な知識について。

Martin Fowler による Errant Architectures (主に分散コンピューティングについて説明していますが、トランザクションにも適用できます)、MSDN のDistributed Transactions Overview 、および次の 2 つの意見を参照することをお勧めします。

ディストリビューションは本当に悪いですか?および (について) マーティン・ファウラーの分配の第一法則.

于 2009-12-12T08:52:19.260 に答える