uuidはどこまでuuidか試してみた
西日暮里.rb ゴールデンだよLT大会
04/28 2016
山田 雄
ネットビジネス本部
データ基盤T
■山田 雄(ヤマダ ユウ)
株式会社 リクルートライフスタイル
ネットビジネス本部
データ基盤T
Twitter:@nii_yan
Github: https://github.com/yu-yamada
Blog:イクジニアブログ
・元々フリーランスエンジニア
縁があってリクルートライフスタイルにお世話になることになった。
ビックデータ、Ruby、ビールが好き。
自己紹介
UUID
(User Unique ID)
(Universally Unique Identifier)
普遍的に 唯一の 識別子
こんなことやりたいです
Redshift
実現するためのアーキテクチャ
secor
s4qs-rs
S3
Redshift
データの確認どうやる??
Fluentdから送られてくるメッセージ毎にUUID欲しいです!
俺の作ったpluginちょいと改良すれば出来そうなんでやっておきます!
Qiita: fluentdでメッセージにuuidを追加する方法
http://qiita.com/nii_yan/items/35376464bb26169e4433
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のうち6bitは固定
ちなみに宝くじの当たる確率は1/2^24ぐらいらし
い・・・
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 "find!!"
break
end
aa << r
if i % 1000 == 0
puts i
end
end
一応本当に衝突しないか試してみた
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万件ぐらいでは全然かぶらず。
そして実行時間が遅い・・・
postgres使ってみた
上記のようなテーブルにひたすらuuidを生成して突っ込む。
エラーが出たらuuidが衝突したはず。
name 型 key
uuid text Primary key
行くぜ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万件
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的な意味で)
Aurora使ってみた
name 型 key
uuid string Primary key
Aurora使ってみた
お金が心配で出来なかったです・・・・
name 型 key
uuid string Primary key
Redshiftに入ってるデータ見てみた
2億件ぐらいデータ溜まっていたが衝突
なし
まとめ
Securerandomで生成させるuuidは個人
で検証出来る範囲ではuuidでした!
きっとそれ以上の範囲でもかなりuuidで
す。
ご清聴ありがとうございました
(@nii_yan)

More Related Content

PDF
暗号化したまま計算できる暗号技術とOSS開発による広がり
PDF
Dockerfile を書くためのベストプラクティス解説編
PDF
統計的係り受け解析入門
PPTX
Visual Studio CodeでRを使う
PDF
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
PDF
プログラミングコンテストでの動的計画法
PDF
ウェーブレット木の世界
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
暗号化したまま計算できる暗号技術とOSS開発による広がり
Dockerfile を書くためのベストプラクティス解説編
統計的係り受け解析入門
Visual Studio CodeでRを使う
JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
プログラミングコンテストでの動的計画法
ウェーブレット木の世界
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について

What's hot (20)

PPTX
ビッグデータ処理データベースの全体像と使い分け
2018年version
PDF
ドメインモデルの育て方
PDF
MySQLで論理削除と正しく付き合う方法
PPTX
心理学におけるオープンサイエンス入門(OSF&PsyArXiv編)
PDF
イミュータブルデータモデルの極意
PDF
リクルート式 自然言語処理技術の適応事例紹介
PDF
オブジェクト指向できていますか?
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
PDF
その ionice、ほんとに効いてますか?
PDF
Stanコードの書き方 中級編
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
PPTX
よくわかるHopscotch hashing
PDF
マイクロにしすぎた結果がこれだよ!
PPTX
Linuxのsemaphoreとmutexを見る 
PDF
DARM勉強会第3回 (missing data analysis)
PDF
ルールベースから機械学習への道 公開用
PDF
マイクロサービス 4つの分割アプローチ
PPTX
SQLチューニング入門 入門編
PDF
知っているようで知らないPAMのお話
PDF
MongoDB Configパラメータ解説
ビッグデータ処理データベースの全体像と使い分け
2018年version
ドメインモデルの育て方
MySQLで論理削除と正しく付き合う方法
心理学におけるオープンサイエンス入門(OSF&PsyArXiv編)
イミュータブルデータモデルの極意
リクルート式 自然言語処理技術の適応事例紹介
オブジェクト指向できていますか?
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
その ionice、ほんとに効いてますか?
Stanコードの書き方 中級編
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
よくわかるHopscotch hashing
マイクロにしすぎた結果がこれだよ!
Linuxのsemaphoreとmutexを見る 
DARM勉強会第3回 (missing data analysis)
ルールベースから機械学習への道 公開用
マイクロサービス 4つの分割アプローチ
SQLチューニング入門 入門編
知っているようで知らないPAMのお話
MongoDB Configパラメータ解説
Ad

Similar to Uuidはどこまでuuidか試してみた (20)

PPT
ListPod with OpenID
PPTX
CDH4->5 update苦労話
PDF
IPv6移行の現状 〜 宅内端末から見た IPv6 と IPv4〜
PDF
【A-L】コミュニティが成長させるマルチクラウド環境でのデータ管理の世界 ~Docker Hubで500,000ダウンロード達成、Scality S3サー...
PPTX
企業主催勉強会BPStudy〜個人が輝くコミュニティを目指して
PDF
2024 annual retrospect / IoT fullstack freelance
PPTX
Jupyterで運用やってみた
PDF
What i feel when began use AWS CodePipeline as GitLab Ci user
PDF
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
PDF
de:code 夏まつり クイズクライアント作ったよ!
PDF
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
PPTX
Ciecleci
PPTX
Live2Dの描画の裏側の話
PPTX
tsudaりについて
PDF
テスト漏れを無くしたい!ワークフロー単位でトリガーを自由に設定したい要望
PPTX
WebとIoTとMake
PPTX
Google cloudnext recap_DataAnalytics
PPTX
qpsutdy 201307 LT
PDF
Golang, make and robotics #gocon
PPTX
Twilio の API を SQL で操作!? 〜 CData Drivers for Twilio 製品のご紹介 〜
ListPod with OpenID
CDH4->5 update苦労話
IPv6移行の現状 〜 宅内端末から見た IPv6 と IPv4〜
【A-L】コミュニティが成長させるマルチクラウド環境でのデータ管理の世界 ~Docker Hubで500,000ダウンロード達成、Scality S3サー...
企業主催勉強会BPStudy〜個人が輝くコミュニティを目指して
2024 annual retrospect / IoT fullstack freelance
Jupyterで運用やってみた
What i feel when began use AWS CodePipeline as GitLab Ci user
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
de:code 夏まつり クイズクライアント作ったよ!
Rustで DDD を実践しながら API サーバーを実装・構築した(つもり)
Ciecleci
Live2Dの描画の裏側の話
tsudaりについて
テスト漏れを無くしたい!ワークフロー単位でトリガーを自由に設定したい要望
WebとIoTとMake
Google cloudnext recap_DataAnalytics
qpsutdy 201307 LT
Golang, make and robotics #gocon
Twilio の API を SQL で操作!? 〜 CData Drivers for Twilio 製品のご紹介 〜
Ad

More from Yu Yamada (10)

PPTX
リクルートライフスタイルが考える、万人に使ってもらえる分析基盤の作り方
PPTX
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
PPTX
ここがつらいよAws batch
PPTX
オンプレ、クラウドを組み合わせて作るビックデータ基盤 データ基盤の選び方
PPTX
やってはいけない空振りDelete
PPTX
リクルートライフスタイルの売上を支える共通分析基盤
PPTX
kafkaのデータをRedshiftへ入れるパイプライン作ってみた
PPTX
リクルートライフスタイルのデータを支える技術
PPTX
オンプレとクラウドのHadoopを比較して僕の思うとこ
PDF
僕の考える最強のビックデータエンジニア
リクルートライフスタイルが考える、万人に使ってもらえる分析基盤の作り方
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
ここがつらいよAws batch
オンプレ、クラウドを組み合わせて作るビックデータ基盤 データ基盤の選び方
やってはいけない空振りDelete
リクルートライフスタイルの売上を支える共通分析基盤
kafkaのデータをRedshiftへ入れるパイプライン作ってみた
リクルートライフスタイルのデータを支える技術
オンプレとクラウドのHadoopを比較して僕の思うとこ
僕の考える最強のビックデータエンジニア

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

Editor's Notes

  • #2: これからHadoop導入する方がオンプレかクラウドか悩んだ際に少しでも参考になれば嬉しいです。