Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
uuidはどこまでuuidか試してみた
西日暮里.rb ゴールデンだよLT大会
04/28 2016
山田 雄
ネットビジネス本部
データ基盤T
■山田 雄(ヤマダ ユウ)
株式会社 リクルートライフスタイル
ネットビジネス本部
データ基盤T
Twitter:@nii_yan
Github: https://github.com/yu-yamada
Blog:イクジニアブログ
・元々フリ...
UUID
(User Unique ID)
(Universally Unique Identifier)
普遍的に 唯一の 識別子
こんなことやりたいです
Redshift
実現するためのアーキテクチャ
secor
s4qs-rs
S3
Redshift
データの確認どうやる??
Fluentdから送られてくるメッセージ毎にUUID欲しいです!
俺の作ったpluginちょいと改良すれば出来そうなんでやっておきます!
Qiita: fluentdでメッセージにuuidを追加する方法
http://...
UUIDの実装
require 'securerandom'
SecureRandom.uuid
427037E7-235B-4F6C-9975-15AAC75E56C5
どこまでUUIDか?
427037E7-235B-4F6C-9975-15AAC75E56C5
16進数の32桁なので
単純に考えれば16^32 なので 2^128通り
ようは128bit
どこまでUUIDか?
340澗(かん)通り!!!
(兆,京,垓,抒(じょ),穣(じょう),溝(こう),澗(かん))
ipv6と同じ数
どこまでUUIDか?
Securerandomではuuid version4のuuidを作成
出来る。
RFC4122
version4を使っている場合生成されたIDが他の
IDと衝突する確率は1/2^61。
Version4は128bitのう...
UUIDのバージョン?
バージョン 生成方法
1 MacAddressとタイムスタンプ
2 DEC Security
3 名前のmd5ハッシュ
4 ランダム
5 名前のSHA-1ハッシュ
一応本当に衝突しないか試してみた
require 'securerandom'
aa=Array.new
100000.times do |i|
r=SecureRandom.uuid.upcase
if aa.include?(r)
puts...
一応本当に衝突しないか試してみた
require 'securerandom'
aa=Array.new
100000.times do |i|
r=SecureRandom.uuid.upcase
if aa.include?(r)
puts...
postgres使ってみた
上記のようなテーブルにひたすらuuidを生成して突っ込む。
エラーが出たらuuidが衝突したはず。
name 型 key
uuid text Primary key
行くぜ1000万件
require 'pg'
require 'securerandom'
require 'parallel'
connection = PG::connect(:host => "localhost", :user => ”...
行くぜ1000万件
require 'pg'
require 'securerandom'
require 'parallel'
connection = PG::connect(:host => "localhost", :user => ”...
Aurora使ってみた
name 型 key
uuid string Primary key
Aurora使ってみた
お金が心配で出来なかったです・・・・
name 型 key
uuid string Primary key
Redshiftに入ってるデータ見てみた
2億件ぐらいデータ溜まっていたが衝突
なし
まとめ
Securerandomで生成させるuuidは個人
で検証出来る範囲ではuuidでした!
きっとそれ以上の範囲でもかなりuuidで
す。
ご清聴ありがとうございました
(@nii_yan)
Prochain SlideShare
Chargement dans…5
×

Uuidはどこまでuuidか試してみた

8 046 vues

Publié le

西日暮里.rb ゴールデンだよLT大会 @ 秋葉原UDX!!
山田 雄(株式会社リクルートライフスタイル)

Publié dans : Technologie
  • Login to see the comments

Uuidはどこまでuuidか試してみた

  1. 1. uuidはどこまでuuidか試してみた 西日暮里.rb ゴールデンだよLT大会 04/28 2016 山田 雄 ネットビジネス本部 データ基盤T
  2. 2. ■山田 雄(ヤマダ ユウ) 株式会社 リクルートライフスタイル ネットビジネス本部 データ基盤T Twitter:@nii_yan Github: https://github.com/yu-yamada Blog:イクジニアブログ ・元々フリーランスエンジニア 縁があってリクルートライフスタイルにお世話になることになった。 ビックデータ、Ruby、ビールが好き。 自己紹介
  3. 3. UUID (User Unique ID) (Universally Unique Identifier) 普遍的に 唯一の 識別子
  4. 4. こんなことやりたいです Redshift
  5. 5. 実現するためのアーキテクチャ secor s4qs-rs S3 Redshift
  6. 6. データの確認どうやる?? Fluentdから送られてくるメッセージ毎にUUID欲しいです! 俺の作ったpluginちょいと改良すれば出来そうなんでやっておきます! Qiita: fluentdでメッセージにuuidを追加する方法 http://qiita.com/nii_yan/items/35376464bb26169e4433
  7. 7. UUIDの実装 require 'securerandom' SecureRandom.uuid 427037E7-235B-4F6C-9975-15AAC75E56C5
  8. 8. どこまでUUIDか? 427037E7-235B-4F6C-9975-15AAC75E56C5 16進数の32桁なので 単純に考えれば16^32 なので 2^128通り ようは128bit
  9. 9. どこまでUUIDか? 340澗(かん)通り!!! (兆,京,垓,抒(じょ),穣(じょう),溝(こう),澗(かん)) ipv6と同じ数
  10. 10. どこまでUUIDか? Securerandomではuuid version4のuuidを作成 出来る。 RFC4122 version4を使っている場合生成されたIDが他の IDと衝突する確率は1/2^61。 Version4は128bitのうち6bitは固定 ちなみに宝くじの当たる確率は1/2^24ぐらいらし い・・・
  11. 11. UUIDのバージョン? バージョン 生成方法 1 MacAddressとタイムスタンプ 2 DEC Security 3 名前のmd5ハッシュ 4 ランダム 5 名前のSHA-1ハッシュ
  12. 12. 一応本当に衝突しないか試してみた require 'securerandom' aa=Array.new 100000.times do |i| r=SecureRandom.uuid.upcase if aa.include?(r) puts "find!!" break end aa << r if i % 1000 == 0 puts i end end
  13. 13. 一応本当に衝突しないか試してみた require 'securerandom' aa=Array.new 100000.times do |i| r=SecureRandom.uuid.upcase if aa.include?(r) puts "find!!" break end aa << r if i % 1000 == 0 puts i end end 10万件ぐらいでは全然かぶらず。 そして実行時間が遅い・・・
  14. 14. postgres使ってみた 上記のようなテーブルにひたすらuuidを生成して突っ込む。 エラーが出たらuuidが衝突したはず。 name 型 key uuid text Primary key
  15. 15. 行くぜ1000万件 require 'pg' require 'securerandom' require 'parallel' connection = PG::connect(:host => "localhost", :user => ”XXX", :password => ”XXX", :dbname => ”XXX" ) begin Parallel.each([*1..10000000], in_processes: 4) do |i| r=SecureRandom.uuid.upcase sql = "insert into uuid_test (uuid) values('#{r}')" connection.exec(sql) if i % 10000 == 0 puts i end end rescue => ex puts ex ensure connection.finish end
  16. 16. 行くぜ1000万件 require 'pg' require 'securerandom' require 'parallel' connection = PG::connect(:host => "localhost", :user => ”XXX", :password => ”XXX", :dbname => ”XXX" ) begin Parallel.each([*1..10000000], in_processes: 4) do |i| r=SecureRandom.uuid.upcase sql = "insert into uuid_test (uuid) values('#{r}')" connection.exec(sql) if i % 10000 == 0 puts i end end rescue => ex puts ex ensure connection.finish end 1000万件もそれ以上も余裕だが、 僕のmacが余裕ない・・・ToT (容量やCPU的な意味で)
  17. 17. Aurora使ってみた name 型 key uuid string Primary key
  18. 18. Aurora使ってみた お金が心配で出来なかったです・・・・ name 型 key uuid string Primary key
  19. 19. Redshiftに入ってるデータ見てみた 2億件ぐらいデータ溜まっていたが衝突 なし
  20. 20. まとめ Securerandomで生成させるuuidは個人 で検証出来る範囲ではuuidでした! きっとそれ以上の範囲でもかなりuuidで す。
  21. 21. ご清聴ありがとうございました (@nii_yan)

×