私の同僚と私は、データベースでの識別のためにユーザーIDと投稿IDを自動生成するためにこれらの方法のどれを使用するかについて議論しています。
1つのオプションは、Randomの単一インスタンスを使用し、いくつかの有用なパラメーターを使用して、あらゆる種類の文字列生成の場合(つまり、4桁の数字ピンから20桁の英数字IDまで)で再利用できるようにします。コードは次のとおりです。
// This is created once for the lifetime of the server instance
class RandomStringGenerator
{
public const string ALPHANUMERIC_CAPS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
public const string ALPHA_CAPS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public const string NUMERIC = "1234567890";
Random rand = new Random();
public string GetRandomString(int length, params char[] chars)
{
string s = "";
for (int i = 0; i < length; i++)
s += chars[rand.Next() % chars.Length];
return s;
}
}
他のオプションは単に使用することです:
Guid.NewGuid();
MSDNのGuid.NewGuidを参照してください
私たちは両方ともそれが私たちのニーズに合うことを知っていGuid.NewGuid()
ますが、私はむしろカスタムメソッドを使用したいと思います。それは同じことをしますが、より多くの制御があります。
私の同僚は、カスタムメソッドが自分たちで作成されているため、衝突が発生する可能性が高いと考えています。Randomの実装を完全には認識していないことは認めますが、Guid.NewGuid()と同じくらいランダムであると思います。カスタムメソッドの一般的な使用法は次のとおりです。
RandomStringGenerator stringGen = new RandomStringGenerator();
string id = stringGen.GetRandomString(20, RandomStringGenerator.ALPHANUMERIC_CAPS.ToCharArray());
編集1:
- キーを生成するための自動インクリメント(または同様の)機能を備えていないAzureテーブルを使用しています。
- ここでのいくつかの回答は、NewGuid()を使用するように指示しているだけです。Guidと同じ自由度が与えられた場合に、クックアップされたメソッドが衝突を生成する可能性が高い理由について、より詳細な理由を探しています。
編集2:
また、クックアップされたメソッドを使用して投稿IDを生成しました。これは、セッショントークンとは異なり、WebサイトのURL(http://mywebsite.com/14983336など)で表示されるようにきれいに表示する必要があるため、ここではGUIDを使用できません。ただし、衝突はまだ回避する必要があります。