狠狠撸

狠狠撸Share a Scribd company logo
大規模 CSV を MySQL に入れる

       飯塚修平
この発表の目的
? ログデータ数年分を MySQL (RDS) に入れる。
 – 30万レコード/(日?テーブル) * 365 日/年 * 3 年 * 5 テーブル
   = 16 億レコードくらいの規模
 – とりあえず 1 年分だけでも入れたい???


? 今回の苦悩を紹介することで、今後同じようなタスクに
  取り組む人の参考にしてもらう。

? さらに良い方法があればぜひ紹介してください。
まず
? BULK INSERT で書いた
  – ウェブアプリで API のレスポンスを格納する時にはよく使う
      ? Facebook の友人リストとか, 某の ID リストとか
  – INSERT INTO tbl VALUES (val,val,val), (val,val,val), (val ...
? 遅すぎ。
ので
? LOAD DATA INFILE で書いた
  – はやい!
  – 基本的に
    ? “” あり→ VARCHAR, TEXT
    ? “” なし→ INT, FLOAT
  – しかし、上手くやれば DATETIME 型に対応したり、文字列処理
    しながら入れることも可能
たとえば
? こんな CSV
  – “セッションID”, “Page”, “タイムスタンプ”, “Page Views”
  – "10000339141949907327:6","1","2011/01/01 12:10:27",1


? こんな テーブル
  –   session_id VARCHAR(100) NOT NULL
  –   session_num INTEGER(11) NOT NULL
  –   to_page INTEGER(11) NOT NULL
  –   timestamp DATETIME NOT NULL
  –   page_view INTEGER(11) NOT NULL
       ? ちなみに、NOT NULL をつけていないカラムをキーにして走査するとパフォーマン
         スが落ちる。参考 http://www.mysqlperformanceblog.com/2007/04/10/count-vs-
         countcol/
ならばこんなかんじ

LOAD DATA LOCAL INFILE ?hoge.csv? # RDS の場合 LOCAL が必要
REPLACE INTO TABLE tbl                # REPLACE か IGNORE
CHARACTER SET utf8
FIELDS TERMINATED BY ?,?              # CSV なので
OPTIONALLY ENCLOSED BY ?“?                 # “”囲みなので
IGNORE 1 LINES                             # 先頭行は無視する
(@var1, to_page, @var2, page_view)
SET
session_id = SUBSTRING(@var1, 1, LOCATE(':', @var1)-1), session_num =
SUBSTRING(@var1, LOCATE(':', @var1)+1),
timestamp = STR_TO_DATE(@var2, '%Y/%m/%d %H:%i:%s?);
“10000339141949907327:6” → “10000339141949907327”, 6
DATETIME の型を指定する



参考 http://kedar.nitty-witty.com/blog/load-delimited-data-csv-excel-into-mysql-server
InnoDB か MyISAM か
? とりあえず InnoDB?
  ? トランザクション対応
      ? ウェブサービスでは必須
  ? 行ロック
  ? データサイズが大きい
      ? MyISAM の 2~3 倍
  ? 構造が複雑
? MyISAMを使うことに。
  ? SELECT COUNT(*) が異様に速い
      ? InnoDB → type=INDEX, MyISAM → type=NULL
      ? 参考 http://opendatabaselife.blogspot.jp/2009/10/myisaminnodb.html
  ? テーブルロック
? バッチ、SELECT 中心なら MyISAM がいいかも
? ウェブで使うなら InnoDB
  – 参考 http://nippondanji.blogspot.jp/2009/02/myisaminnodb.html
高速化のために
? EXPLAIN をつかってチューニング
    – select_type → type の順にチューニング
? できるだけ SUBQUERY はつかわない
    – SELECT ... WHERE IN (SELECT ...) みたいなやつ
    – 基本的に LEFT JOIN で書き換えられるはず
    – select_type = SINPLE を目指す
         ? 具体的なことは???
           http://nippondanji.blogspot.jp/2009/03/mysql_25.html
? INDEX で絞る
    – type = ALL(フルテーブルスキャン)または
      type = INDEX(フルインデックススキャン)は要改善。
? key_len が短くなるように
    – UTF-8 の場合、 “123” は 9, 123 は 3

参考 http://nippondanji.blogspot.jp/2009/03/mysqlexplain.html
RDS のインスタンスと書き込み速度




    small   medium
まとめ
? 基本的に InnoDB。しかし、書き込みをしない、全文検
  索したいなど、特別な状況では MyISAM を検討しても
  よい。

? LOAD DATA INFILE 構文のオプションを使いこなせば、
  大抵のことはできる。

? 無駄なく適切なデータ型でスキームを書くべし。

? 高速化のためには EXPLAIN でチューニングを行うべ
  し。

More Related Content

What's hot (20)

ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
Tetsutaro Watanabe
?
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
?
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
Google Cloud Platform - Japan
?
惭测厂蚕尝で论理削除と正しく付き合う方法
惭测厂蚕尝で论理削除と正しく付き合う方法惭测厂蚕尝で论理削除と正しく付き合う方法
惭测厂蚕尝で论理削除と正しく付き合う方法
yoku0825
?
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
NTT DATA Technology & Innovation
?
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loader
Sadayuki Furuhashi
?
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
?
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
NTT DATA Technology & Innovation
?
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
Takanori Sejima
?
惭补惫别苍の真実とウソ
惭补惫别苍の真実とウソ惭补惫别苍の真実とウソ
惭补惫别苍の真実とウソ
Yoshitaka Kawashima
?
颁颈谤肠濒别颁滨の颈苍蹿谤补蝉迟谤耻肠迟耻谤别を支える罢别谤谤补蹿辞谤尘の颁滨/颁顿パイプラインの改善
颁颈谤肠濒别颁滨の颈苍蹿谤补蝉迟谤耻肠迟耻谤别を支える罢别谤谤补蹿辞谤尘の颁滨/颁顿パイプラインの改善颁颈谤肠濒别颁滨の颈苍蹿谤补蝉迟谤耻肠迟耻谤别を支える罢别谤谤补蹿辞谤尘の颁滨/颁顿パイプラインの改善
颁颈谤肠濒别颁滨の颈苍蹿谤补蝉迟谤耻肠迟耻谤别を支える罢别谤谤补蹿辞谤尘の颁滨/颁顿パイプラインの改善
Ito Takayuki
?
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
基本に戻って滨苍苍辞顿叠の话をします
基本に戻って滨苍苍辞顿叠の话をします基本に戻って滨苍苍辞顿叠の话をします
基本に戻って滨苍苍辞顿叠の话をします
yoku0825
?
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
Samir Hammoudi
?
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
?
例外设计における大罪
例外设计における大罪例外设计における大罪
例外设计における大罪
Takuto Wada
?
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
Google Cloud Platform - Japan
?
Cassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sqlCassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sql
Yutuki r
?
Innodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドInnodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライド
Yasufumi Kinoshita
?
奥别产アフ?リを并行开発する际のマイク?レーション戦略
奥别产アフ?リを并行开発する际のマイク?レーション戦略奥别产アフ?リを并行开発する际のマイク?レーション戦略
奥别产アフ?リを并行开発する际のマイク?レーション戦略
Takayuki Shimizukawa
?
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
ビッグデータ処理データベースの全体像と使い分け?2018年惫别谤蝉颈辞苍
Tetsutaro Watanabe
?
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
?
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
アプリ開発者、DB 管理者視点での Cloud Spanner 活用方法 | 第 10 回 Google Cloud INSIDE Games & App...
Google Cloud Platform - Japan
?
惭测厂蚕尝で论理削除と正しく付き合う方法
惭测厂蚕尝で论理削除と正しく付き合う方法惭测厂蚕尝で论理削除と正しく付き合う方法
惭测厂蚕尝で论理削除と正しく付き合う方法
yoku0825
?
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
NTT DATA Technology & Innovation
?
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loader
Sadayuki Furuhashi
?
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
?
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
NTT DATA Technology & Innovation
?
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
Takanori Sejima
?
颁颈谤肠濒别颁滨の颈苍蹿谤补蝉迟谤耻肠迟耻谤别を支える罢别谤谤补蹿辞谤尘の颁滨/颁顿パイプラインの改善
颁颈谤肠濒别颁滨の颈苍蹿谤补蝉迟谤耻肠迟耻谤别を支える罢别谤谤补蹿辞谤尘の颁滨/颁顿パイプラインの改善颁颈谤肠濒别颁滨の颈苍蹿谤补蝉迟谤耻肠迟耻谤别を支える罢别谤谤补蹿辞谤尘の颁滨/颁顿パイプラインの改善
颁颈谤肠濒别颁滨の颈苍蹿谤补蝉迟谤耻肠迟耻谤别を支える罢别谤谤补蹿辞谤尘の颁滨/颁顿パイプラインの改善
Ito Takayuki
?
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
?
基本に戻って滨苍苍辞顿叠の话をします
基本に戻って滨苍苍辞顿叠の话をします基本に戻って滨苍苍辞顿叠の话をします
基本に戻って滨苍苍辞顿叠の话をします
yoku0825
?
超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座超実践 Cloud Spanner 設計講座
超実践 Cloud Spanner 設計講座
Samir Hammoudi
?
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
?
例外设计における大罪
例外设计における大罪例外设计における大罪
例外设计における大罪
Takuto Wada
?
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要[GKE & Spanner 勉強会] Cloud Spanner の技術概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
Google Cloud Platform - Japan
?
Cassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sqlCassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sql
Yutuki r
?
Innodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライドInnodb Deep Talk #2 でお話したスライド
Innodb Deep Talk #2 でお話したスライド
Yasufumi Kinoshita
?
奥别产アフ?リを并行开発する际のマイク?レーション戦略
奥别产アフ?リを并行开発する际のマイク?レーション戦略奥别产アフ?リを并行开発する际のマイク?レーション戦略
奥别产アフ?リを并行开発する际のマイク?レーション戦略
Takayuki Shimizukawa
?

Similar to 大规模颁厂痴を惭测厂蚕尝に入れる (20)

いまいま惭测厂蚕尝蔼翱厂颁2016长冈
いまいま惭测厂蚕尝蔼翱厂颁2016长冈いまいま惭测厂蚕尝蔼翱厂颁2016长冈
いまいま惭测厂蚕尝蔼翱厂颁2016长冈
sakaik
?
AWS Black Belt Tech シリーズ 2015 - Amazon Redshift
AWS Black Belt Tech シリーズ 2015 - Amazon RedshiftAWS Black Belt Tech シリーズ 2015 - Amazon Redshift
AWS Black Belt Tech シリーズ 2015 - Amazon Redshift
Amazon Web Services Japan
?
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
Toshi Harada
?
Babelfish Compatibility
Babelfish CompatibilityBabelfish Compatibility
Babelfish Compatibility
Noriyoshi Shinoda
?
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatech
Mikiya Okuno
?
PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介
NTT DATA OSS Professional Services
?
とある顿叠础の黒い画面(ターミナル)
とある顿叠础の黒い画面(ターミナル)とある顿叠础の黒い画面(ターミナル)
とある顿叠础の黒い画面(ターミナル)
Kazuhiro Yoshikawa
?
はじめてのAmazon Redshift
はじめてのAmazon RedshiftはじめてのAmazon Redshift
はじめてのAmazon Redshift
Jun Okubo
?
いまいま惭测厂蚕尝蔼翱厂颁2016福冈
いまいま惭测厂蚕尝蔼翱厂颁2016福冈いまいま惭测厂蚕尝蔼翱厂颁2016福冈
いまいま惭测厂蚕尝蔼翱厂颁2016福冈
sakaik
?
お金をかけない顿叠チューニング
お金をかけない顿叠チューニングお金をかけない顿叠チューニング
お金をかけない顿叠チューニング
Kazuya Sato
?
大规模ソーシャルゲーム开発から学んだ笔贬笔&惭测厂蚕尝実践テクニック
大规模ソーシャルゲーム开発から学んだ笔贬笔&惭测厂蚕尝実践テクニック大规模ソーシャルゲーム开発から学んだ笔贬笔&惭测厂蚕尝実践テクニック
大规模ソーシャルゲーム开発から学んだ笔贬笔&惭测厂蚕尝実践テクニック
infinite_loop
?
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門
だいすけ さとう
?
MySQL SQL tuning
MySQL SQL tuningMySQL SQL tuning
MySQL SQL tuning
Tetsuro Nagae
?
闯厂翱狈叠型て?辫辞蝉迟驳谤别蝉を狈辞厂蚕尝っほ?く使う
闯厂翱狈叠型て?辫辞蝉迟驳谤别蝉を狈辞厂蚕尝っほ?く使う闯厂翱狈叠型て?辫辞蝉迟驳谤别蝉を狈辞厂蚕尝っほ?く使う
闯厂翱狈叠型て?辫辞蝉迟驳谤别蝉を狈辞厂蚕尝っほ?く使う
Yuki Takeichi
?
初心者向け负荷軽减のはなし
初心者向け负荷軽减のはなし初心者向け负荷軽减のはなし
初心者向け负荷軽减のはなし
Oonishi Takaaki
?
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Satoshi Nagayasu
?
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Yohei Sasaki
?
搁补颈濒蝉エンシ?ニアのための厂蚕尝チューニンク?速习会
搁补颈濒蝉エンシ?ニアのための厂蚕尝チューニンク?速习会搁补颈濒蝉エンシ?ニアのための厂蚕尝チューニンク?速习会
搁补颈濒蝉エンシ?ニアのための厂蚕尝チューニンク?速习会
Nao Minami
?
Qlik composeを利用したDWH構築の流れ
Qlik composeを利用したDWH構築の流れQlik composeを利用したDWH構築の流れ
Qlik composeを利用したDWH構築の流れ
QlikPresalesJapan
?
笔辞蝉迟驳谤别厂蚕尝10彻底解説
笔辞蝉迟驳谤别厂蚕尝10彻底解説笔辞蝉迟驳谤别厂蚕尝10彻底解説
笔辞蝉迟驳谤别厂蚕尝10彻底解説
Masahiko Sawada
?
いまいま惭测厂蚕尝蔼翱厂颁2016长冈
いまいま惭测厂蚕尝蔼翱厂颁2016长冈いまいま惭测厂蚕尝蔼翱厂颁2016长冈
いまいま惭测厂蚕尝蔼翱厂颁2016长冈
sakaik
?
AWS Black Belt Tech シリーズ 2015 - Amazon Redshift
AWS Black Belt Tech シリーズ 2015 - Amazon RedshiftAWS Black Belt Tech シリーズ 2015 - Amazon Redshift
AWS Black Belt Tech シリーズ 2015 - Amazon Redshift
Amazon Web Services Japan
?
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
Toshi Harada
?
MySQL 5.5 Update #denatech
MySQL 5.5 Update #denatechMySQL 5.5 Update #denatech
MySQL 5.5 Update #denatech
Mikiya Okuno
?
とある顿叠础の黒い画面(ターミナル)
とある顿叠础の黒い画面(ターミナル)とある顿叠础の黒い画面(ターミナル)
とある顿叠础の黒い画面(ターミナル)
Kazuhiro Yoshikawa
?
はじめてのAmazon Redshift
はじめてのAmazon RedshiftはじめてのAmazon Redshift
はじめてのAmazon Redshift
Jun Okubo
?
いまいま惭测厂蚕尝蔼翱厂颁2016福冈
いまいま惭测厂蚕尝蔼翱厂颁2016福冈いまいま惭测厂蚕尝蔼翱厂颁2016福冈
いまいま惭测厂蚕尝蔼翱厂颁2016福冈
sakaik
?
お金をかけない顿叠チューニング
お金をかけない顿叠チューニングお金をかけない顿叠チューニング
お金をかけない顿叠チューニング
Kazuya Sato
?
大规模ソーシャルゲーム开発から学んだ笔贬笔&惭测厂蚕尝実践テクニック
大规模ソーシャルゲーム开発から学んだ笔贬笔&惭测厂蚕尝実践テクニック大规模ソーシャルゲーム开発から学んだ笔贬笔&惭测厂蚕尝実践テクニック
大规模ソーシャルゲーム开発から学んだ笔贬笔&惭测厂蚕尝実践テクニック
infinite_loop
?
Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門Ruby on Rails on MySQL チューニング入門
Ruby on Rails on MySQL チューニング入門
だいすけ さとう
?
闯厂翱狈叠型て?辫辞蝉迟驳谤别蝉を狈辞厂蚕尝っほ?く使う
闯厂翱狈叠型て?辫辞蝉迟驳谤别蝉を狈辞厂蚕尝っほ?く使う闯厂翱狈叠型て?辫辞蝉迟驳谤别蝉を狈辞厂蚕尝っほ?く使う
闯厂翱狈叠型て?辫辞蝉迟驳谤别蝉を狈辞厂蚕尝っほ?く使う
Yuki Takeichi
?
初心者向け负荷軽减のはなし
初心者向け负荷軽减のはなし初心者向け负荷軽减のはなし
初心者向け负荷軽减のはなし
Oonishi Takaaki
?
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
アナリティクスをPostgreSQLで始めるべき10の理由@第6回 関西DB勉強会
Satoshi Nagayasu
?
BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門BPStudy32 CouchDB 再入門
BPStudy32 CouchDB 再入門
Yohei Sasaki
?
搁补颈濒蝉エンシ?ニアのための厂蚕尝チューニンク?速习会
搁补颈濒蝉エンシ?ニアのための厂蚕尝チューニンク?速习会搁补颈濒蝉エンシ?ニアのための厂蚕尝チューニンク?速习会
搁补颈濒蝉エンシ?ニアのための厂蚕尝チューニンク?速习会
Nao Minami
?
Qlik composeを利用したDWH構築の流れ
Qlik composeを利用したDWH構築の流れQlik composeを利用したDWH構築の流れ
Qlik composeを利用したDWH構築の流れ
QlikPresalesJapan
?
笔辞蝉迟驳谤别厂蚕尝10彻底解説
笔辞蝉迟驳谤别厂蚕尝10彻底解説笔辞蝉迟驳谤别厂蚕尝10彻底解説
笔辞蝉迟驳谤别厂蚕尝10彻底解説
Masahiko Sawada
?

More from Shuhei Iitsuka (20)

Online and offline handwritten chinese character recognition a comprehensive...
Online and offline handwritten chinese character recognition  a comprehensive...Online and offline handwritten chinese character recognition  a comprehensive...
Online and offline handwritten chinese character recognition a comprehensive...
Shuhei Iitsuka
?
Inferring win–lose product network from user behavior
Inferring win–lose product network from user behaviorInferring win–lose product network from user behavior
Inferring win–lose product network from user behavior
Shuhei Iitsuka
?
バリエーションの提示がもたらす長期的効果に着目したウェブサイト最適化手法 @第31回人工知能学会全国大会
バリエーションの提示がもたらす長期的効果に着目したウェブサイト最適化手法 @第31回人工知能学会全国大会バリエーションの提示がもたらす長期的効果に着目したウェブサイト最適化手法 @第31回人工知能学会全国大会
バリエーションの提示がもたらす長期的効果に着目したウェブサイト最適化手法 @第31回人工知能学会全国大会
Shuhei Iitsuka
?
Procedural modeling using autoencoder networks
Procedural modeling using autoencoder networksProcedural modeling using autoencoder networks
Procedural modeling using autoencoder networks
Shuhei Iitsuka
?
Generating sentences from a continuous space
Generating sentences from a continuous spaceGenerating sentences from a continuous space
Generating sentences from a continuous space
Shuhei Iitsuka
?
ウェブサイト最适化のためのバリエーション自动生成システム
ウェブサイト最适化のためのバリエーション自动生成システムウェブサイト最适化のためのバリエーション自动生成システム
ウェブサイト最适化のためのバリエーション自动生成システム
Shuhei Iitsuka
?
Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-E...
Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-E...Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-E...
Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-E...
Shuhei Iitsuka
?
Machine learning meets web development
Machine learning meets web developmentMachine learning meets web development
Machine learning meets web development
Shuhei Iitsuka
?
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめるPython と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめる
Shuhei Iitsuka
?
リミックスからはじめる DTM 入門
リミックスからはじめる DTM 入門リミックスからはじめる DTM 入門
リミックスからはじめる DTM 入門
Shuhei Iitsuka
?
【DBDA 勉強会 2013 夏】Chapter 12: Bayesian Approaches to Testing a Point (‘‘Null’’...
【DBDA 勉強会 2013 夏】Chapter 12: Bayesian Approaches to Testing a Point (‘‘Null’’...【DBDA 勉強会 2013 夏】Chapter 12: Bayesian Approaches to Testing a Point (‘‘Null’’...
【DBDA 勉強会 2013 夏】Chapter 12: Bayesian Approaches to Testing a Point (‘‘Null’’...
Shuhei Iitsuka
?
Asia Trend Map: Forecasting “Cool Japan” Content Popularity on Web Data
Asia Trend Map: Forecasting “Cool Japan” Content Popularity on Web DataAsia Trend Map: Forecasting “Cool Japan” Content Popularity on Web Data
Asia Trend Map: Forecasting “Cool Japan” Content Popularity on Web Data
Shuhei Iitsuka
?
【DBDA 勉強会 2013 夏】Doing Bayesian Data Analysis Chapter 4: Bayes’ Rule
【DBDA 勉強会 2013 夏】Doing Bayesian Data Analysis Chapter 4: Bayes’ Rule【DBDA 勉強会 2013 夏】Doing Bayesian Data Analysis Chapter 4: Bayes’ Rule
【DBDA 勉強会 2013 夏】Doing Bayesian Data Analysis Chapter 4: Bayes’ Rule
Shuhei Iitsuka
?
UT Startup Gym で人生が変わった話
UT Startup Gym で人生が変わった話UT Startup Gym で人生が変わった話
UT Startup Gym で人生が変わった話
Shuhei Iitsuka
?
ウェブサイトで収益を得る
ウェブサイトで収益を得るウェブサイトで収益を得る
ウェブサイトで収益を得る
Shuhei Iitsuka
?
HTML で自己紹介ページをつくる
HTML で自己紹介ページをつくるHTML で自己紹介ページをつくる
HTML で自己紹介ページをつくる
Shuhei Iitsuka
?
データベースを使おう
データベースを使おうデータベースを使おう
データベースを使おう
Shuhei Iitsuka
?
ウェブサービスの企画とデザイン
ウェブサービスの企画とデザインウェブサービスの企画とデザイン
ウェブサービスの企画とデザイン
Shuhei Iitsuka
?
テ?ータヘ?ースを使おう
テ?ータヘ?ースを使おうテ?ータヘ?ースを使おう
テ?ータヘ?ースを使おう
Shuhei Iitsuka
?
第3期キックオフ説明会+勉强会
第3期キックオフ説明会+勉强会 第3期キックオフ説明会+勉强会
第3期キックオフ説明会+勉强会
Shuhei Iitsuka
?
Online and offline handwritten chinese character recognition a comprehensive...
Online and offline handwritten chinese character recognition  a comprehensive...Online and offline handwritten chinese character recognition  a comprehensive...
Online and offline handwritten chinese character recognition a comprehensive...
Shuhei Iitsuka
?
Inferring win–lose product network from user behavior
Inferring win–lose product network from user behaviorInferring win–lose product network from user behavior
Inferring win–lose product network from user behavior
Shuhei Iitsuka
?
バリエーションの提示がもたらす長期的効果に着目したウェブサイト最適化手法 @第31回人工知能学会全国大会
バリエーションの提示がもたらす長期的効果に着目したウェブサイト最適化手法 @第31回人工知能学会全国大会バリエーションの提示がもたらす長期的効果に着目したウェブサイト最適化手法 @第31回人工知能学会全国大会
バリエーションの提示がもたらす長期的効果に着目したウェブサイト最適化手法 @第31回人工知能学会全国大会
Shuhei Iitsuka
?
Procedural modeling using autoencoder networks
Procedural modeling using autoencoder networksProcedural modeling using autoencoder networks
Procedural modeling using autoencoder networks
Shuhei Iitsuka
?
Generating sentences from a continuous space
Generating sentences from a continuous spaceGenerating sentences from a continuous space
Generating sentences from a continuous space
Shuhei Iitsuka
?
ウェブサイト最适化のためのバリエーション自动生成システム
ウェブサイト最适化のためのバリエーション自动生成システムウェブサイト最适化のためのバリエーション自动生成システム
ウェブサイト最适化のためのバリエーション自动生成システム
Shuhei Iitsuka
?
Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-E...
Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-E...Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-E...
Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-E...
Shuhei Iitsuka
?
Machine learning meets web development
Machine learning meets web developmentMachine learning meets web development
Machine learning meets web development
Shuhei Iitsuka
?
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめるPython と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめる
Shuhei Iitsuka
?
リミックスからはじめる DTM 入門
リミックスからはじめる DTM 入門リミックスからはじめる DTM 入門
リミックスからはじめる DTM 入門
Shuhei Iitsuka
?
【DBDA 勉強会 2013 夏】Chapter 12: Bayesian Approaches to Testing a Point (‘‘Null’’...
【DBDA 勉強会 2013 夏】Chapter 12: Bayesian Approaches to Testing a Point (‘‘Null’’...【DBDA 勉強会 2013 夏】Chapter 12: Bayesian Approaches to Testing a Point (‘‘Null’’...
【DBDA 勉強会 2013 夏】Chapter 12: Bayesian Approaches to Testing a Point (‘‘Null’’...
Shuhei Iitsuka
?
Asia Trend Map: Forecasting “Cool Japan” Content Popularity on Web Data
Asia Trend Map: Forecasting “Cool Japan” Content Popularity on Web DataAsia Trend Map: Forecasting “Cool Japan” Content Popularity on Web Data
Asia Trend Map: Forecasting “Cool Japan” Content Popularity on Web Data
Shuhei Iitsuka
?
【DBDA 勉強会 2013 夏】Doing Bayesian Data Analysis Chapter 4: Bayes’ Rule
【DBDA 勉強会 2013 夏】Doing Bayesian Data Analysis Chapter 4: Bayes’ Rule【DBDA 勉強会 2013 夏】Doing Bayesian Data Analysis Chapter 4: Bayes’ Rule
【DBDA 勉強会 2013 夏】Doing Bayesian Data Analysis Chapter 4: Bayes’ Rule
Shuhei Iitsuka
?
UT Startup Gym で人生が変わった話
UT Startup Gym で人生が変わった話UT Startup Gym で人生が変わった話
UT Startup Gym で人生が変わった話
Shuhei Iitsuka
?
ウェブサイトで収益を得る
ウェブサイトで収益を得るウェブサイトで収益を得る
ウェブサイトで収益を得る
Shuhei Iitsuka
?
HTML で自己紹介ページをつくる
HTML で自己紹介ページをつくるHTML で自己紹介ページをつくる
HTML で自己紹介ページをつくる
Shuhei Iitsuka
?
データベースを使おう
データベースを使おうデータベースを使おう
データベースを使おう
Shuhei Iitsuka
?
ウェブサービスの企画とデザイン
ウェブサービスの企画とデザインウェブサービスの企画とデザイン
ウェブサービスの企画とデザイン
Shuhei Iitsuka
?
テ?ータヘ?ースを使おう
テ?ータヘ?ースを使おうテ?ータヘ?ースを使おう
テ?ータヘ?ースを使おう
Shuhei Iitsuka
?
第3期キックオフ説明会+勉强会
第3期キックオフ説明会+勉强会 第3期キックオフ説明会+勉强会
第3期キックオフ説明会+勉强会
Shuhei Iitsuka
?

大规模颁厂痴を惭测厂蚕尝に入れる

  • 1. 大規模 CSV を MySQL に入れる 飯塚修平
  • 2. この発表の目的 ? ログデータ数年分を MySQL (RDS) に入れる。 – 30万レコード/(日?テーブル) * 365 日/年 * 3 年 * 5 テーブル = 16 億レコードくらいの規模 – とりあえず 1 年分だけでも入れたい??? ? 今回の苦悩を紹介することで、今後同じようなタスクに 取り組む人の参考にしてもらう。 ? さらに良い方法があればぜひ紹介してください。
  • 3. まず ? BULK INSERT で書いた – ウェブアプリで API のレスポンスを格納する時にはよく使う ? Facebook の友人リストとか, 某の ID リストとか – INSERT INTO tbl VALUES (val,val,val), (val,val,val), (val ... ? 遅すぎ。
  • 4. ので ? LOAD DATA INFILE で書いた – はやい! – 基本的に ? “” あり→ VARCHAR, TEXT ? “” なし→ INT, FLOAT – しかし、上手くやれば DATETIME 型に対応したり、文字列処理 しながら入れることも可能
  • 5. たとえば ? こんな CSV – “セッションID”, “Page”, “タイムスタンプ”, “Page Views” – "10000339141949907327:6","1","2011/01/01 12:10:27",1 ? こんな テーブル – session_id VARCHAR(100) NOT NULL – session_num INTEGER(11) NOT NULL – to_page INTEGER(11) NOT NULL – timestamp DATETIME NOT NULL – page_view INTEGER(11) NOT NULL ? ちなみに、NOT NULL をつけていないカラムをキーにして走査するとパフォーマン スが落ちる。参考 http://www.mysqlperformanceblog.com/2007/04/10/count-vs- countcol/
  • 6. ならばこんなかんじ LOAD DATA LOCAL INFILE ?hoge.csv? # RDS の場合 LOCAL が必要 REPLACE INTO TABLE tbl # REPLACE か IGNORE CHARACTER SET utf8 FIELDS TERMINATED BY ?,? # CSV なので OPTIONALLY ENCLOSED BY ?“? # “”囲みなので IGNORE 1 LINES # 先頭行は無視する (@var1, to_page, @var2, page_view) SET session_id = SUBSTRING(@var1, 1, LOCATE(':', @var1)-1), session_num = SUBSTRING(@var1, LOCATE(':', @var1)+1), timestamp = STR_TO_DATE(@var2, '%Y/%m/%d %H:%i:%s?); “10000339141949907327:6” → “10000339141949907327”, 6 DATETIME の型を指定する 参考 http://kedar.nitty-witty.com/blog/load-delimited-data-csv-excel-into-mysql-server
  • 7. InnoDB か MyISAM か ? とりあえず InnoDB? ? トランザクション対応 ? ウェブサービスでは必須 ? 行ロック ? データサイズが大きい ? MyISAM の 2~3 倍 ? 構造が複雑 ? MyISAMを使うことに。 ? SELECT COUNT(*) が異様に速い ? InnoDB → type=INDEX, MyISAM → type=NULL ? 参考 http://opendatabaselife.blogspot.jp/2009/10/myisaminnodb.html ? テーブルロック ? バッチ、SELECT 中心なら MyISAM がいいかも ? ウェブで使うなら InnoDB – 参考 http://nippondanji.blogspot.jp/2009/02/myisaminnodb.html
  • 8. 高速化のために ? EXPLAIN をつかってチューニング – select_type → type の順にチューニング ? できるだけ SUBQUERY はつかわない – SELECT ... WHERE IN (SELECT ...) みたいなやつ – 基本的に LEFT JOIN で書き換えられるはず – select_type = SINPLE を目指す ? 具体的なことは??? http://nippondanji.blogspot.jp/2009/03/mysql_25.html ? INDEX で絞る – type = ALL(フルテーブルスキャン)または type = INDEX(フルインデックススキャン)は要改善。 ? key_len が短くなるように – UTF-8 の場合、 “123” は 9, 123 は 3 参考 http://nippondanji.blogspot.jp/2009/03/mysqlexplain.html
  • 10. まとめ ? 基本的に InnoDB。しかし、書き込みをしない、全文検 索したいなど、特別な状況では MyISAM を検討しても よい。 ? LOAD DATA INFILE 構文のオプションを使いこなせば、 大抵のことはできる。 ? 無駄なく適切なデータ型でスキームを書くべし。 ? 高速化のためには EXPLAIN でチューニングを行うべ し。