少し前に、Go言語に注意を払うことが可能になり、出版物「パスポート管理、または1.5ギガバイトを42Mbに圧縮する方法」が出てきました。この記事では、ロシアのパスポート番号が無効なパスポートのリストに含まれているかどうかを確認するサービスを開発するためのテストタスクについて簡単に説明しています。実装の主な要件は、検証の速度とサービスの可用性です。
記事を読んだ後、私はあなたがあなたの囲碁学習を構築することができるのはこの実際的な仕事にあると自分自身で決めました。確かに、無効なパスポートをチェックする問題は、ハックニーされていますが、興味深いものです。ここではパフォーマンス要件が優先されるため、Goでの実装はここでは非常に適切です。
さらに、上記の記事では、メモリの観点から、ビット配列(ビットマップ)の編成の効率性の問題に触れています。また、このトピックは、DBMSのビットマップインデックスの形式など、さまざまな適用ソリューションで非常に関連性があり、需要があります。
その結果、次のようになります。それ自体が新しいGo言語を見たいという願望があり、ビットマップの編成と使用という形で興味深い問題があります(当然、Goでは)。これらの2つの目標を達成することができます。興味があれば、どうぞ。
生データとは
パスポートをチェックするまさにそのタスクは、ロシア連邦内務省のウェブサイトに提示された無効なパスポートの主要なリストを中心に構築されており 、パスポート番号を手動でチェックすることもできます。リスト全体を460MBのサイズのパックアーカイブとしてサイトからダウンロードできます。解凍すると、シリーズとパスポート番号の2つの列を持つ単一のCSVファイルとして表示される約1.5GBのサイズのリストが得られます。
現在までに、このCSVファイルには約1億3200万のパスポート番号が含まれています。ただし、ファイルには、明確に識別できない誤った番号も含まれています。たとえば、シリーズの4桁すべて、または番号の6桁すべてが示されていない場合、アルファベットのシリーズが存在する可能性があります。
4- 6- , , , . , , , .. , .
Go , , .
–
. , . , – . , 10 000 ( 0 9999), 1 000 000 ( 0 999998, .. 000001). , ( , G), .. 10 000 bitmap, bitmap 15 625 uint64.
15 625?
, 1 000 000 125 000 , , , 15 625 ( x86-64)
, , 1.25 , 10 000 bitmap. , .. . – , 10 000 bitmap 3 300 ( ).
–
– , , bitmap , . , , , ..15 625 1 000 000 . , . , .
bitmap – roaring bitmap.
–
, , . Pilosa.
Pilosa – . Pilosa , , . – () .
, , , .. Pilosa. , Pilosa, .. (binary matrices).
Pilosa , Go, «» Go, . « ». Pilosa.
, :
. - , – Pilosa.
http . GET , POST, json. .
.
, , ..
, , , Docker .
, . .
. , Go « » , , , , . , , , Go . Go , , , Linux, Mac OS Windows, . , , uint16 uint64.
Go, , , .
, , GitHub. Go, Go «». roaring bitmap Pilosa , .
, , . , , , , . , - API . – , , . . , .. , . , .
API
, , GET
http://localhost:8080/passport?series=8003&number=011384
html json , , ContentType "application/json" .
"application/json":
[{
"series": "8003",
"number": "011384",
"status": "non-valid"
}]
status “valid” “non-valid”
json POST , status:
http://localhost:8080/passport
[
{
"series": "4050",
"number": "039589"
},
{
"series": "5203",
"number": "257719"
},
{
"series": "5000",
"number": "347024"
},
{
"series": "2507",
"number": "857721"
},
{
"series": "2507" ,
"number": "857728"
}
]
, status. - , , ( 100)
i7 7- 16 Gb , Windows Pro WSL2(Windows Subsystem for Linux), Docker Desktop For Windows. , , : Windows, WSL url ApacheBench 1000- , 100 . , Go (benchmark), , .
:
( );
;
.
bitmap
1.5 30 , . , , .
, «» , 1.25 Gb ( ), 440 . - , .. . , .
(1000 100 ), , «Time per request» 0.1 ms , , .
, :
30 ;
440 ;
0.10 ms.
, .
roaring bitmap
1.5 , bitmap. 44 (!) , , , . 0.18ms, , , , .
roaring bitmap:
, bitmap :
90 ;
44 ;
0.18 ms.
. , , .. roaring bitmap, 64- C (Croaring).
Pilosa
Pilosa , . , . , Pilosa Windows, , , . , « ». , Pilosa docker- Windows – .
Pilosa , , .. .
Pilosa – 1 1000 . 132 .
Pilosa WSL2, .
Pilosa 4 , , , , , , , , .. .
Pilosa , , , , .. Pilosa bitmap roaring bitmap.
– 0.5 ms .
Pilosa:
240 ;
;
0.5 ms.
, Pilosa , , , . , (timestamp), Pilosa.
, Go . . , . – Go .
, - , , Go.
roaring bitmap . bitmap bitmap, roaring bitmap.