0

nhibernate ormレイヤーでc#とmssqlデータベースを使用し、本番環境でどちらのアプローチを使用する方が速いかを考えています。

私の知る限り、Guidは4バイトに対してintよりも4倍多くのスペースを使用します。

データの同期は頻繁に行われます。悪いアプローチは大量のメモリ消費につながる可能性があるため、これは厄介な問題です。整数を使用すると応答が速くなりますが、シーケンスから値を取得するには、すべてのデータ挿入がデータベースにヒットする必要があります。

したがって、mssql内でIDを使用する整数アプローチを使用する必要がありますか、それともID列のnhibernateマッピング内でHiLoジェネレーターを使用する必要がありますか?

GUIDを使用するとパフォーマンスの問題が発生しますか?

4

1 に答える 1

2

128ビットのデータ型(guid)を比較するのとは対照的に、32ビットのデータ型(4バイトint)を比較する間のパフォーマンスはおそらく非常に小さいです。私には数字がありません。最大の要因は、128ビットのデータ型が小さいデータ型ではなく複数のレジスタを占めることです。64ビットアーキテクチャに移行しているため、GUIDは、比較時に1つではなく2つのレジスタを使用します。

それでも、32ビットまたは128ビットの識別子で最適化しようとするよりも、問題の要件に基づいて保守可能な戦略を使用することをお勧めします。

要件の1つはデータベースの同期であると述べたため、intの増分ではなくGUIDが推奨されます。インクリメントされたintを使用する場合は、基本的に、挿入する前に、インクリメントされたintが別のデータベースで「取得」されていないことを確認する必要があります。

もちろん、これにはいくつかの戦略を立てることができます。たとえば、すべてのクライアントが範囲の特定のサブセットでのみ生成するなどですが、これはすでにGUIDを使用してカバーされています。そのサイズと作成方法のおかげで、各クライアントは、他の誰かによって複製される可能性を最小限に抑えてGUIDを作成できます。

つまり、言い換えると、GUIDを使用することをお勧めします

于 2012-04-28T18:50:15.303 に答える