3

HiLo を使用してエンティティの ID を生成する ASP.NET データベース アプリケーションを実行しています。このアプリケーションに加えて、同じデータベースを使用するいくつかの Web サイトがあります。私たちが見ているのは、ID が不足していて、ID 列が負の数になっていることです。

これはジェネレーターと関係があると思われます。複数の Web サイトが同じコードベースとデータベース上で実行されているため、おそらく HiLo アルゴリズムはすぐに bigint 範囲外の ID を生成し始めます (もちろん、すぐに相対的になります)。

必要に応じて値を率直に増やすのではなく、ID シーケンスのギャップ (かなりの数があります) も使用するようにジェネレーターを構成することは可能ですか?

それは解決策になるでしょうか?それとも、まったく別のことをすべきでしょうか?

4

3 に答える 3

1

max_loは何に設定されていますか?idを生成する式は次のとおりです。

h =上位シーケンス(0から開始)l_size=下位ブロックのサイズl=下位シーケンス(1から開始)

ID = h * l_size + l

たぶんあなたのmax_loは高く設定されていますか?

于 2011-06-02T17:11:52.687 に答える
0

可能な場合はGuid.Combジェネレーターに切り替えるか、ID にint64を使用できます。どのジェネレーターを使用するかについての最終的な決定については、こちらをご覧ください。

于 2011-02-01T14:30:27.873 に答える
0

私は同じ問題に遭遇しましたが、適切な答えを見つけることもできませんでした。

また、すべて同じ Web サーバー上で、各サイトが独自の個別のアプリケーション プールにある個別の Web サイトとして実行されているサイトもあります。

実用的には、データベースがサポートしている場合は、ID マッピングに切り替えるだけの方がよいでしょう。それほど難しいことではありません。TSQL を少し使用してデータベース スキーマを変更し、検索/置換を使用して ID マッピングを変更できるはずです。

アプリケーションに UoW に似たコンセプトはありますか? ID 生成の欠点は、UoW (識別子を取得するための早期挿入) を壊すことです。とはいえ、それは支払う価値のある価格かもしれません。

私の場合、システムは単一のサイト/アプリ プールとして簡単に存在できます (単一の共有接続文字列を持つ単一のデータベース上でマルチテナントであり、Web サーバー上で単一のインスタンスとして実行するように設計されています)。データベースIDにジャンプする前にそれをテストしてください..

于 2011-02-01T14:31:13.613 に答える