Typescriptのスケーラブルな一意のID関数

user123456

重複の可能性を最小限に抑える一意のIDを生成する方法は何ですか?

for(let i = 0; i < <Arbitrary Limit>; i++)
  generateID();

現在の解決策はいくつかありますが、それらはすべて問題を解決するための回り道です。

考えられる解決策1:データベースを使用して新しいIDを生成します。フロントエンドでこれを実行したいので、これは私には機能しません。

考えられる解決策2:Math.random()* Math.floor(LIMIT)を使用します。ここで、LIMITは数値です。オーバーラップの可能性を最小限に抑えるには大きな制限が必要であり、したがって大量のIDが必要になるため、これは機能しません。IDを必要とする数十万のインスタンスを操作する場合、チャンスは大幅に増加します。

考えられる解決策3:

'_' + Math.random().toString(36).substr(2, 9);

これはほぼ機能しますが、Math.random()は疑似ランダムだと思います。

考えられる解決策4:Date.now()。Date.getTime()など。[Date.now()、Date.now()]を生成すると同じIDが発生するため、これは機能しません。重複を最小限に抑えるために、おそらく長いIDも必要です。

同じIDを生成する可能性が絶対に0%である必要はありません。次のことを行わずに、可能性を可能な限り最小限に抑えたいと考えています。

  1. カウントの保存
  2. 「その他のテクノロジー」の使用(データベースなし、ライブラリなしなど)
  3. 大規模なIDを作成する

これはできればscalabeである必要があります。これは、10または1000000のIDで機能するはずです。

編集:ローカルで生成され、フロントエンドのユーザー間で通信する必要のない一意のID。例:コンポーネントは同じクラスの多くのインスタンスをレンダリングする必要があり、それに割り当てるためのキーが必要です。キーは異なっている必要があり、コンポーネントをアンマウントすると、生成されたキー/インスタンスが削除されます。

ピーターO。

バックエンドにまったく依存したり「カウントを保存」したりせずに、完全にフロントエンドで一意のIDを生成したいようです。次に、ソリューションは、アプリケーションの存続期間中にアプリケーションのフロントエンドにアクセスすると予想されるさまざまなユーザーの数に一部依存し、IDのサイズは、衝突のリスクを許容できる程度に依存します(IDを生成していると仮定)無作為に); そのためには、誕生日の問題を参照してください

次に、選択したIDのサイズに応じて、crypto.randomBytes「真の」ランダムIDに最も近い暗号化RNG(関数など)を使用してランダムにIDを生成します。

一方、フロントエンドにアクセスするユーザーが少なくても、各ユーザーが多数の一意のIDを生成する場合は、中央データベースから各ユーザーに一意の値を割り当てることができます。これは、各フロントエンドコンピューターがその一意の値を次のように使用できるためです。生成する一意の識別子の一部であり、他のコンピューターや中央データベースにさらに接続することなく、アプリケーション全体で識別子が一意であることを確認します。

他にも考慮事項があることに注意してください。IDを知っているだけで(ログインしたり、何らかの方法で承認されていなくても)IDが識別するリソースに誰でもアクセスできるかどうかも検討する必要があります。そうでない場合は、追加のアクセス制御が必要になります。


目的に応じて、シーケンシャルIDを適用してみてください。シーケンシャルIDだけでは不十分な場合は、シーケンシャルIDに可逆操作を適用してみてください。この操作の一例は、次のページで説明するような、技術的には「2モジュラスの累乗の線形合同法」と呼ばれます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

列と一意のIDの関数とループ

分類Dev

複数の列に一意のIDがないMYSQL結合テーブル

分類Dev

一意のコレクション内の一意でないオブジェクトに関するFluentNHibernateカスケード保存の問題

分類Dev

長さが異なる複数のテーブルを結合し、一意のIDを追加する方法

分類Dev

postgresqlで最適でスケーラブルな一意のpage_viewテーブルを設計する方法は?

分類Dev

各クラスの一意のID

分類Dev

一意のランダムな数字のシーケンスを作成する

分類Dev

一意のランダム描画を使用したデータテーブルの動的な列数

分類Dev

一意の ID シーケンスを生成する

分類Dev

IDが一意でないmysqlテーブルの穴を見つける

分類Dev

エラー#1066-MySQLの一意のテーブル/エイリアスではない

分類Dev

サブグループ内の一意の行の数

分類Dev

一意ではないテーブル/エイリアス:MySqlの「ユーザー」エラー

分類Dev

一意のブラウザ/ユーザーID?

分類Dev

SQLiteテーブルの制約-複数の列で一意

分類Dev

Laravel5複数テーブルの一意の検証

分類Dev

異なるテーブルの列の一意キー

分類Dev

グループ化変数によって一意のケースの数で変数を作成する

分類Dev

SCORM1.2パッケージに一意のユーザー/コースID変数が必要

分類Dev

MySQLの「一意ではないテーブル/エイリアス」

分類Dev

生成された動的な一意のIDを保存し、次のテストケースに解析します

分類Dev

django関数ベースのリストビューで一意のオブジェクトIDを渡す方法が必要です

分類Dev

データテーブルの複数の列ごとに一意のIDを割り当てます

分類Dev

postgresqlのURLの一意の非シーケンシャルID

分類Dev

複数の一意のスイッチを備えた関数での高度なパラメータセットの使用

分類Dev

一意のIDに基づいて2つのテーブルを関連付ける方法

分類Dev

複数のグループで一意の数のIDを見つける

分類Dev

一意で連続したID列のないテーブルのカーソルベースのページ分割?

分類Dev

一意の値がないSQL結合テーブル

Related 関連記事

  1. 1

    列と一意のIDの関数とループ

  2. 2

    複数の列に一意のIDがないMYSQL結合テーブル

  3. 3

    一意のコレクション内の一意でないオブジェクトに関するFluentNHibernateカスケード保存の問題

  4. 4

    長さが異なる複数のテーブルを結合し、一意のIDを追加する方法

  5. 5

    postgresqlで最適でスケーラブルな一意のpage_viewテーブルを設計する方法は?

  6. 6

    各クラスの一意のID

  7. 7

    一意のランダムな数字のシーケンスを作成する

  8. 8

    一意のランダム描画を使用したデータテーブルの動的な列数

  9. 9

    一意の ID シーケンスを生成する

  10. 10

    IDが一意でないmysqlテーブルの穴を見つける

  11. 11

    エラー#1066-MySQLの一意のテーブル/エイリアスではない

  12. 12

    サブグループ内の一意の行の数

  13. 13

    一意ではないテーブル/エイリアス:MySqlの「ユーザー」エラー

  14. 14

    一意のブラウザ/ユーザーID?

  15. 15

    SQLiteテーブルの制約-複数の列で一意

  16. 16

    Laravel5複数テーブルの一意の検証

  17. 17

    異なるテーブルの列の一意キー

  18. 18

    グループ化変数によって一意のケースの数で変数を作成する

  19. 19

    SCORM1.2パッケージに一意のユーザー/コースID変数が必要

  20. 20

    MySQLの「一意ではないテーブル/エイリアス」

  21. 21

    生成された動的な一意のIDを保存し、次のテストケースに解析します

  22. 22

    django関数ベースのリストビューで一意のオブジェクトIDを渡す方法が必要です

  23. 23

    データテーブルの複数の列ごとに一意のIDを割り当てます

  24. 24

    postgresqlのURLの一意の非シーケンシャルID

  25. 25

    複数の一意のスイッチを備えた関数での高度なパラメータセットの使用

  26. 26

    一意のIDに基づいて2つのテーブルを関連付ける方法

  27. 27

    複数のグループで一意の数のIDを見つける

  28. 28

    一意で連続したID列のないテーブルのカーソルベースのページ分割?

  29. 29

    一意の値がないSQL結合テーブル

ホットタグ

アーカイブ