Slide 1

Slide 1 text

大量の物件情報を 短時間で 処理するハック データ分析勉強会 ~SQL 活用~ @onunu

Slide 2

Slide 2 text

Hello! おぬま りく@onunu IESHILという不動産の情報格差 をなんとかしていくサービスを 作っています データエンジニアです Twitter: @onunu_ Github: onunu (有益な情報はおそらく皆無)

Slide 3

Slide 3 text

0. 今日の話の前に データエンジニアってどんな仕事?

Slide 4

Slide 4 text

Q. データエンジニアってどんな仕事? 実際のところ、裏方の何でも屋みたいになってます. A. ぼくもよくわからん ◎ というのも、できたばかりの職種で人や会社によって定 義がまちまち ◎ 最大公約数的にはサーバーサイドと機械学習エンジニ ア/データサイエンティストの橋渡し ○ トランザクションデータをDSに渡す仕組み ○ MLのアウトプットをサービスに組み込む ○ データの整形/前処理 ○ 上記を行うための基盤/インフラの整備 etc...

Slide 5

Slide 5 text

1. 今日のテーマ 大量の物件情報を処理するハック

Slide 6

Slide 6 text

大量の物件情報を処理するハック そんなものはない

Slide 7

Slide 7 text

大量の物件情報を処理するハック 正確にはあるが、 みなさんが聞きたいような内容にはならない MySQL? PostgreSQL? Redshift? BigQuery? Or other? そんなものはない ◎ それぞれのtipsはググれば出てくるし ◎ やってるうちに少しずつわかっていく ◎ 小手先のテクニックで楽をする手段はユースケースを 想像できないと理解しにくい

Slide 8

Slide 8 text

なので 大量の物件情報を処理するハック そんなものはない ◎ 事業会社と学生or個人で作るサービスの対比をしなが ら ◎ なるべく汎用的な設計の話とかを交えつつ ◎ これからビッグデータとか、データサイエンスみたいな もの(?)にどう向き合っていくか などなどを話していきたいと思います :)

Slide 9

Slide 9 text

2. 昨今のDB選び

Slide 10

Slide 10 text

Let’s thinking! わからない人は、 「何でファイルシステムではダメなんだろう?」 を考えてみよう 昨今のDB選び そもそもDBって何で使うんだっけ?

Slide 11

Slide 11 text

◎ データを構造化して保存する ◎ データの蓄積が容易になる ◎ データの検索、更新を容易にする ◎ ビジネスロジックとデータを分離する ファイルシステムは内容や名前をキーに検索する手段が あるが、それ自体にファイルの内容を更新する統一的手 段は存在しない また、内容について正しさを保障する機能もない 昨今のDB選び そもそもDBって何で使うんだっけ?

Slide 12

Slide 12 text

DBといったら何が思い浮かびますか? サービスを1から作れと言われたら、 何を使うでしょうか? 昨今のDB選び ではどのDBを使う?

Slide 13

Slide 13 text

DBといったら何が思い浮かびますか? サービスを1から作れと言われたら、 何を使うでしょうか? おそらくほとんどの人が、 RDBを思い浮かべたと思います。 昨今のDB選び ではどのDBを使う?

Slide 14

Slide 14 text

RDBの中にも大きなカテゴリがあります 下にのRDBが {A, B}どちらのグループになるか考えてみま しょう 昨今のDB選び ではどのDBを使う?

Slide 15

Slide 15 text

昨今のDB選び ではどのDBを使う? Group A Group B

Slide 16

Slide 16 text

昨今のDB選び ではどのDBを使う? Group A Group B

Slide 17

Slide 17 text

今考えてもらったRDBのカテゴリ分けは、 どのような違いに基づいて分けられたものでしょうか? 昨今のDB選び ではどのDBを使う?

Slide 18

Slide 18 text

世界でもっとも利用されているDBは oracleだそうです 昨今のDB選び ではどのDBを使う? DB-Engines Ranking (https://db-engines.com/en/ranking)

Slide 19

Slide 19 text

MySQLとPostgreSQLがあるように、どうやら上位は さきほどのGroupAのようです... 昨今のDB選び ではどのDBを使う? DB-Engines Ranking (https://db-engines.com/en/ranking)

Slide 20

Slide 20 text

3. 行(Row)指向DBと 列(Column)指向DB

Slide 21

Slide 21 text

行(Row)指向DBと列(Column)指向DB 行指向 列指向

Slide 22

Slide 22 text

行(Row)指向DBと列(Column)指向DB 行指向DBはサービスの フロントエンドDBとして利用される MySQL, PostgreSQLなど、アプリケーションが直接問い合わせ にいくDBです ◎ データを保存する際は1行ずつ ◎ 取り出す際も1行全ての列を取り出すことが得意

Slide 23

Slide 23 text

◎ データを保存する際、複数行を列ごとに保存 ◎ 取り出す際も、指定された列のみ取り出し ○ 指定外の列は取り出さない 行(Row)指向DBと列(Column)指向DB 列指向DBは? AWS Redshift, BigQuery, Hiveなどは列指向DBです

Slide 24

Slide 24 text

行(Row)指向DBと列(Column)指向DB 列指向DBはなんのために生まれた? 列指向DBは行指向DBに比べて後発です。 何のために生まれたのでしょうか? アプリケーション内で使われるSQLと、 分析で使われるSQLを見比べてみましょう

Slide 25

Slide 25 text

アプリケーション内で使われるSQL 行(Row)指向DBと列(Column)指向DB 列指向DBはなんのために生まれた?

Slide 26

Slide 26 text

分析で使われるSQL 行(Row)指向DBと列(Column)指向DB 列指向DBはなんのために生まれた?

Slide 27

Slide 27 text

アプリケーションでは、1つの行の全体(*)を使うことが多いの に対し、分析では複数の行の一部の列だけが欲しい場合が 多い 列指向DBは主に分析用途で使われることが多いDB 行(Row)指向DBと列(Column)指向DB 列指向DBはなんのために生まれた?

Slide 28

Slide 28 text

行(Row)指向DBと列(Column)指向DB 列指向DBは主に分析用途 しっかりした分析基盤を構築する際、 アプリケーションで利用するDBとは思想が異なる 列指向DBを利用することでMLエンジニア/DSの負担を減ら すことができる データエンジニアの仕事の一部として ◎ 列指向DBを中心とする分析環境の構築・運用 ◎ アプリケーションで作成されたトランザクションデータを 分析DBに移し替える仕組み作り なんかも含まれます

Slide 29

Slide 29 text

行指向DBと列指向DBについて簡単ですが解説しました ですが、それぞれのカテゴリの中にさらに様々な種類があ ります。何が違うのでしょうか? 細かな構文(SQL)の違い、設定の仕方の違い、機能差など はもちろんありますが、 それの土台になっているのは思想や哲学です まとめ ソフトウェアの思想や哲学に沿う

Slide 30

Slide 30 text

すべての会社、サービスに出来上がった背景や思想、理念 があるように、ソフトウェアにもそれがあります。 エンジニアとして思想や哲学を理解し、技術選定を行うこと は、どんなtipsにも優る大事な基礎です (そしてこのこと自体もまた思想・哲学です) まとめ ソフトウェアの思想や哲学に沿う

Slide 31

Slide 31 text

ご静聴ありがとうございました!