私は、PWAで読んだ本の会計のために自分のペットプロジェクトを行うことにしました。新しいテクノロジーなどを征服してください。計算では、それを投稿して電話にインストールすると、オフラインで使用できるモバイルアプリケーションができました。APIを見つけるのではなく、ブックを保存するためのUUIDを生成したい。私はその理由を理解することを提案します。
UUIDとは
UUIDは、主に分散システムで使用されるデータ識別標準です。そのタスクは、特定のデータストアに保存されたときに競合を引き起こさないキーの生成を有効にすることです。
UUIDは、HEX形式の16バイトの数値です。
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
どこ:
x - [0 - f] ( ) M - [0 - 5] ( UUID) N - [8 - b] ( UUID)
ここでは、これが何を意味するのかについては詳しく説明しません。ウィキペディアでこれについて詳しく知ることができます。
UUIDを生成する方法
UUIDを生成するためのすべてのメソッドは、クライアントの一意のデータを取得し、それをハッシュ関数で実行して、128ビットのキーを取得するという事実に要約されます。
バージョン1と2は、0.1マイクロ秒+ MACアドレスの精度で時間を使用しました。これにより、重複を取得する方法がほとんどないことが保証されました。この確率を完全に終わらせるために、最初のバージョンはランダムなソルトを追加し、2番目のバージョンは何もしません(2番目のバージョンは好きではありません。7分間で64の一意のIDしか生成できません)。
3 5 (Url, FQDN, OID) + . UUID .
3 5 , 3 MD-5, 5 — SHA-1.
4 ¯_(ツ)_/¯.
JS
MAC- , IP, - .
, file- , , . , UUID . .
: , , :
import * as console from 'console'; console.run('rm -rf /**/kursach*final-(\d+)?.docx')
.
, .
. — . — UUID . , ID , , .
, PWA, 2007 . , PWA , , . ( Play Market PWA , ...). , PWA ? .
— API getUUID()
, ? , 99 100 - .
.
.
, UUID 100 .
1 , ( performance.now()
), .
.
HTML Living Standard The Navigator object.
,
appCodeName | appName | platform | product | productSub | vendor | vendorSub | |
---|---|---|---|---|---|---|---|
Chrome | Mozilla | Netscape | Win32 | Gecko | 20030107 | Google Inc. | - |
Mozilla 75 | Mozilla | Netscape | Win32 | Gecko | 20100101 | - | - |
Mozilla 45 | Mozilla | Netscape | Win32 | Gecko | 20100101 | - | - |
Internet Explorer | Mozilla | Netscape | Win32 | Gecko | - | - | - |
Microsoft Edge | Mozilla | Netscape | Win32 | Gecko | 20030107 | Google Inc. | - |
? ? .
, userAgent
appVersion
:
appVersion | userAgent | |
---|---|---|
Chrome | 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 |
Mozilla 75 | 5.0 (Windows) | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0 |
Mozilla 45 | 5.0 (Windows) | Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0 |
Internet Explorer | 5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; Zoom 3.6.0; rv:11.0) like Gecko | Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0; Zoom 3.6.0; rv:11.0) like Gecko |
Microsoft Edge | 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74 | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 Edg/88.0.705.74 |
Edge , IP, . Edge. , , .
.
- . .
- .
6 16 timestamp', 10889-08-0210:31:50.655
. .
6 SHA-1 — 281,474,976,710,656 ( , ). ( 30).
1 (M) (N).
3 .
:
- 100,000 100 , :
$$
100,000 * 100 / 60,000 = 166
$$
, :
$$
166 1/256^3 1/256^5 = 166 1/255^8 = 166 / 18 10^{18}
$$
" ?"
,
function uuidv4() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); }
キーの最初のバイトが順番に並ぶと、新しいレコードがテーブルの最後に表示される可能性が高くなります。クライアントで同期が開始された場合でも。結局のところ、ユーザーが6か月前に入力したデータを同期し、DBMSがテーブルの半分をシフトする可能性はほとんどありません。
ランダム性の場合、データはプレートのどこにでも挿入されます。