2

多くの開発者と同様に、既存のアプリを SQL Azure フェデレーションに統合する方法を探していますが、Identity 列 (テーブルの主キー) を置き換えることは大きな問題です。

多くの理由から、主キーに GUID を使用したくありません (GUID についての議論を開かないでください。それは私の質問ではありません: GUID が必要ないだけです)。

そのため、標準 SQL データベースの「ID」機能を置き換えるキー プロバイダーを構築する必要があります。私は Entity Framework を使用しているので、 (クラスのメソッドをIdオーバーライドすることによって) 挿入の直前に値を設定する場所を簡単に見つけることができます。「ファーム対応」である現在の Id を取得するための「あまり複雑ではない」実装を見つける必要があるだけです。SaveChangesObjectContext

この SO 投稿を読みました:「シャード データベース (Azure Federated Database) の ID 生成」および「 MSDN Magazineの Windows Azure で複数のノードを同期する」ですが、この解決策は私にとって少し複雑に思えます。

SQL テーブルごとに 1 つの Azure キューを (自動的に) 作成することを考えています。これには、事前に読み込まれた連続する整数のリストが含まれています。Id 値が必要な場合は、キューからメッセージを取得するだけで (非表示になり、途中で削除されます)、現在使用可能な Id が得られます。

"Windows Azure Queues" と "Windows Azure Service Bus Queues" のどちらを選択するかについては、Service Bus Queues の"高い" 待ち時間のため、"Windows Azure Queues" を好みます。Azure Queues の「注文保証」がないことは問題ではないと思います。

Azure キューを使用して Id 値を提供するというアイデアについてどう思いますか? その考えを放棄する議論はありますか? SQL Azure フェデレーション データベースで整数 ID を提供するためのより良いアイデア、または良い習慣はありますか? ありがとう。

編集 :

Astaykov は SnowMaker を提案しました。Azure Storage lib の v2 との完全な互換性を確保するために、SnowMakerのフォークを最終的に行いました。

編集2

ここで説明されているように、 Azure SQL フェデレーションは 2015 年 9 月に Web 層とビジネス層で廃止されることに注意してください。しかし、この質問は、カスタム シャーディング ソリューションにも当てはまります。

4

3 に答える 3

4

スノーメーカー

ただし、本番環境で試したことはありませんが、非常に合理的で信頼できるようです。

アップデート

2 つのこと: Azure.Storage 2.X と一緒に Azure Storage Client 1.7.XX を安全に参照して、SnowMaker を機能させることができます。または、あなたのようにストレージ 2 で動作するように修正します。

余談ですが、個人的にはアイデンティティは何の問題も解決しないと思います。また、アイデンティティの欠如がフェデレーションの不利な点だとは思わないでください。それが私たちに与える力と規模を考えると. 大きなものを作るためには、何かの数字によって自動生成されるという従来の考え方を取り除かなければなりません。

残念ながら、Federations での実際のプロジェクトの経験はまだありませんが、ぜひ試してみたいと思っています。フェデレーションを使用し、非常にスケーラブルな大規模なアプリケーション展開があることを私は知っています。

于 2012-12-07T12:02:45.810 に答える
3

別のオプションはRustFlakesプロジェクトです。これにより、分散システム間で相互に衝突することなく、一意の順次 ID を生成する方法が提供されます。それらは GUID (128 ビット) と同じサイズですが、シーケンシャルであるため、GUID に関連するすべてのページ分割、インデックス作成、および関連する問題が発生するわけではありません。

于 2012-12-10T14:48:23.790 に答える
0

C# ではないため、これが役立つかどうかはわかりませんが、Nodejs Azure Storage SDK の 0.3.3 バージョンを使用して、Snowmaker を Nodejs に移植しました。

npm を使用してインストールできます。

npm install snowmaker

Github リポジトリはhttps://github.com/johnhamm/node-snowmakerです。

于 2014-09-22T02:43:59.360 に答える