9

指定された一意の文字列に対して一意のレコードIDを生成する必要があります。

良さそうなuuid形式を使ってみました。

しかし、それは長いと感じています。

したがって、uuid文字列9f218a38-12cd-5942-b877-80adc0589315を小さくする必要があります。'-'を削除すると、4文字節約できます。UUIDから削除するのに最も安全な部分は何ですか?ユニバーサル一意IDは必要ありませんが、ソースとしてuuidを使用するのが好きですが、文字列を削減します。

サイト/データベース(SQL Server / ADO.NETデータサービス)に固有の一意のIDが必要です。

あらゆる言語のアイデアやサンプルは問題ありません

前もって感謝します

4

5 に答える 5

9

代わりに、それをベース64文字列に変換してみませんか?そうすれば22文字に減らすことができます。

UUIDをbase64文字列として保存する

于 2009-08-19T19:17:50.963 に答える
3

MS-SQLを使用している場合は、おそらく一意の識別子データ型を使用する必要があります。これはコンパクト(16バイト)であり、SQLエンジンはそれを認識しているため、それを使用してインデックスとクエリを最適化できます。

于 2009-08-19T19:29:14.950 に答える
2

UUIDは、(ほぼ)128ビットの一意性を提供します。16バイナリバイト、または22のbase64エンコード文字に短縮できます。UUIDの一部を削除することはお勧めしません。そうしないと、意味が失われます。UUIDは、128ビットすべてに意味があるように設計されています。それより少なくしたい場合は、他のスキーマを使用する必要があります。

たとえば、バージョン4のUUIDのみが使用されることを保証できる場合は、最初の32ビットだけ、または最後の32ビットだけを取ることができます。一意性は失われますが、かなり乱数があります。固定されているビット(バージョンとバリアント)は避けてください。

しかし、それを保証できない場合は、実際の問題が発生します。バージョン1のUUIDの場合、最初のビットは同じ日に生成されたUUIDに対して一意ではなく、最後のビットは同じシステムで生成されたUUIDに対して一意ではありません。UUIDをCRCしても、16ビットまたは32ビットの一意性があるとは限りません。

この場合、他のスキームを使用してください。システム乱数ジェネレーターを使用して32ビットの乱数を生成し、それを一意のIDとして使用します。UUIDの長さを削除する場合は、UUIDに依存しないでください。

于 2009-08-19T20:44:20.807 に答える
2

UUIDは128ビットまたは16バイトです。エンコーディングがないと、16バイトまで低くなる可能性があります。UUIDは通常、16進数で記述されるため、32バイトで読み取り可能な文字列になります。他のエンコーディングでは、異なる結果が得られます。

  1. base-64は3つの8ビットバイトを4つの6ビット文字に変換するため、16バイトのデータは22文字の長さになります
  2. base-85は4つの8ビットバイトを5つの6.4ビット文字に変換するため、16バイトのデータは20文字の長さになります

それはすべて、読み取り可能な文字列が必要かどうか、および使用するエンコーディングがどの程度標準/共通であるかによって異なります。

于 2009-08-19T21:17:05.700 に答える
0

UUIDには128ビットがあります。あなたはそれのCRCをすることを考えましたか?これにより、16ビットまたは32ビットに簡単に下げることができ、元の情報をすべて使用することになります。CRCが十分でない場合は、適切なハッシュ(SHA256など)の最初の数バイトを常に使用できます。

本当にUUIDを削減したい場合は、その形式がRFC4122に記述されています。そこから、実装に必要のない部分を把握できるはずです。

于 2009-08-19T19:30:13.810 に答える