Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Itabashi Masayuki
PDF, PPTX
10,033 views
SQLアンチパターン~ファントムファイル
社内SQLアンチパターン輪読会の資料、第11章ファントムファイル(幻のファイル)です。
Engineering
◦
Read more
16
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 42
2
/ 42
3
/ 42
4
/ 42
5
/ 42
6
/ 42
7
/ 42
8
/ 42
9
/ 42
Most read
10
/ 42
11
/ 42
12
/ 42
13
/ 42
14
/ 42
15
/ 42
16
/ 42
Most read
17
/ 42
18
/ 42
19
/ 42
20
/ 42
21
/ 42
22
/ 42
23
/ 42
24
/ 42
Most read
25
/ 42
26
/ 42
27
/ 42
28
/ 42
29
/ 42
30
/ 42
31
/ 42
32
/ 42
33
/ 42
34
/ 42
35
/ 42
36
/ 42
37
/ 42
38
/ 42
39
/ 42
40
/ 42
41
/ 42
42
/ 42
More Related Content
PDF
それはYAGNIか? それとも思考停止か?
by
Yoshitaka Kawashima
PPTX
Redisの特徴と活用方法について
by
Yuji Otani
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
PDF
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
by
Masahito Zembutsu
PDF
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
by
Jun-ichi Sakamoto
PDF
MySQL 5.7にやられないためにおぼえておいてほしいこと
by
yoku0825
PDF
Javaのログ出力: 道具と考え方
by
Taku Miyakawa
PDF
インフラエンジニアの綺麗で優しい手順書の書き方
by
Shohei Koyama
それはYAGNIか? それとも思考停止か?
by
Yoshitaka Kawashima
Redisの特徴と活用方法について
by
Yuji Otani
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
by
Masahito Zembutsu
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
by
Jun-ichi Sakamoto
MySQL 5.7にやられないためにおぼえておいてほしいこと
by
yoku0825
Javaのログ出力: 道具と考え方
by
Taku Miyakawa
インフラエンジニアの綺麗で優しい手順書の書き方
by
Shohei Koyama
What's hot
PPTX
Spring CloudとZipkinを利用した分散トレーシング
by
Rakuten Group, Inc.
PDF
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
PDF
WebSocketのキホン
by
You_Kinjoh
PDF
PostgreSQLアンチパターン
by
Soudai Sone
PDF
日本語テストメソッドについて
by
kumake
PDF
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
by
Masahito Zembutsu
PDF
ユーザーインタビューするときは、どうやらゾンビのおでましさ
by
Yoshiki Hayama
PDF
MySQLで論理削除と正しく付き合う方法
by
yoku0825
PDF
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
by
Masahito Zembutsu
PDF
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
by
Yoshiki Hayama
PDF
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
TLS, HTTP/2演習
by
shigeki_ohtsu
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
PDF
Docker Compose 徹底解説
by
Masahito Zembutsu
PDF
Confluenceショートカットキー表 v1
by
Naho Inuyama
PDF
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
by
Amazon Web Services Japan
PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方
by
Recruit Lifestyle Co., Ltd.
PPTX
Dockerからcontainerdへの移行
by
Akihiro Suda
PDF
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
Spring CloudとZipkinを利用した分散トレーシング
by
Rakuten Group, Inc.
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
WebSocketのキホン
by
You_Kinjoh
PostgreSQLアンチパターン
by
Soudai Sone
日本語テストメソッドについて
by
kumake
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
by
Masahito Zembutsu
ユーザーインタビューするときは、どうやらゾンビのおでましさ
by
Yoshiki Hayama
MySQLで論理削除と正しく付き合う方法
by
yoku0825
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
by
Masahito Zembutsu
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
by
Yoshiki Hayama
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
TLS, HTTP/2演習
by
shigeki_ohtsu
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
Docker Compose 徹底解説
by
Masahito Zembutsu
Confluenceショートカットキー表 v1
by
Naho Inuyama
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
by
Amazon Web Services Japan
分散トレーシングAWS:X-Rayとの上手い付き合い方
by
Recruit Lifestyle Co., Ltd.
Dockerからcontainerdへの移行
by
Akihiro Suda
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
Viewers also liked
PDF
ファントムファイル
by
Akura Pi
PDF
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
by
makopi 23
PDF
SQLアンチパターン読書会 第10章 サーティワンフレーバー
by
tkfuji
PDF
中の下のエンジニアを脱出するための仕事術
by
Noriaki Kadota
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
ファントムファイル
by
Akura Pi
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
by
makopi 23
SQLアンチパターン読書会 第10章 サーティワンフレーバー
by
tkfuji
中の下のエンジニアを脱出するための仕事術
by
Noriaki Kadota
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
SQLアンチパターン~ファントムファイル
1.
SQLアンチパターン ~ファントムファイル~ CB部ADチーム 板橋正之 2014/05/07
2.
とあるところに 画像とコメントをアップロードすると 一覧表示するサービスが ありました。
3.
A====== ======= ======= ======= A====== ======= ======= ======= XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX アップロード
4.
ある日、 サーバに障害が発生しました。
5.
A====== ======= ======= ======= XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX
6.
こんなこともあろうかと データベースのバックアップを 取っていたのでリカバリを かけました。
7.
A====== ======= ======= ======= XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX リカバリ
8.
データベースは無事復旧しました が
9.
× A====== ======= ======= ======= XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX XXXXXXXXXXXXXX リカバリ × ×
10.
画像が表示されませんorz
11.
何故か!?
12.
バックアップ対象 /var/upload/img/ データベース Hiyoko.jpg Roads.jpg Penguis.jpg reportID
comment imagePath 001 XXXXXXX・・・ Penguins.jpg 002 XXXXXXX・・・ Roads.jpg 003 A======・・・ Hiyoko.jpg A====== ======= ======= ======= アップロード アプリ
13.
サイズが大きくなりやすい 画像ファイル(バイナリ)は データベースではなく ファイルシステムに 保存する仕組み。
14.
目的: 画像をはじめとする 大容量メディアファイルを格納する
15.
アンチパターン: 物理ファイルの使用を 必須と思い込む
16.
注意 物理ファイルを「使用する」 ではなく 「必須と思い込む」が アンチパターン
17.
このアンチパターンに陥ると
18.
/var/upload/img/ データベース Hiyoko.jpg Roads.jpg Penguis.jpg reportID
comment imagePath 001 XXXXXXX・・・ Penguins.jpg 002 XXXXXXX・・・ Roads.jpg 003 A======・・・ Hiyoko.jpg ファイルの削除時の問題 この行を 削除しても 自動的には 削除されない
19.
Aさんの処理 Bさんの処理 1.トランザクション開始 2.reportID:002のデータを 削除 3.Roads.jpgを削除 1.トランザクション開始 2.reportID:002のデータを参照 ・
3.画像ファイルを参照 ・ ・ x.コミット /var/upload/img/ データベース Hiyoko.jpg Roads.jpg Penguis.jpg reportID comment imagePath 001 XXXXXXX・・・ Penguins.jpg 002 XXXXXXX・・・ Roads.jpg 003 A======・・・ Hiyoko.jpg トランザクション分離の問題 コメントは参照できるけど 画像が取得できない!?
20.
Aさんの処理 1.トランザクション開始 2.reportID:002のデータを 削除 3.Roads.jpgを削除 例外発生 ロールバック! /var/upload/img/ データベース Hiyoko.jpg Roads.jpg
Penguis.jpg reportID comment imagePath 001 XXXXXXX・・・ Penguins.jpg 002 XXXXXXX・・・ Roads.jpg 003 A======・・・ Hiyoko.jpg ロールバック時の問題 データベースのデータは 元に戻っても 画像は消えたまま
21.
バックアップ バックアップ Aさんの処理 1.トランザクション開始 2.reportID:002のデータを 削除 3.Roads.jpgを削除 ・ ・ ・ x.コミット /var/upload/img/ データベース Hiyoko.jpg Roads.jpg Penguis.jpg reportID
comment imagePath 001 XXXXXXX・・・ Penguins.jpg 002 XXXXXXX・・・ Roads.jpg 003 A======・・・ Hiyoko.jpg バックアップツール使用時における問題 reportID comment imagePath 001 XXXXXXX・・・ Penguins.jpg 002 XXXXXXX・・・ Roads.jpg 003 A======・・・ Hiyoko.jpg Hiyoko.jpg Penguis.jpg バックアップ ツール バックアップ コマンド トランザクションや 参照整合制約などを 考慮して矛盾なく バックアップ
22.
/var/upload/img/ データベース Hiyoko.jpg Penguis.jpg reportID comment
imagePath 001 XXXXXXX・・・ Penguins.jpg 002 XXXXXXX・・・ Roads.jpg 003 A======・・・ Hiyoko.jpg ファイルはSQLデータ型ではない SQLアクセス権限使用時における問題 単なる文字列 - 文字列であること以外に内容の保証はしない - BMSは実際のファイルが存在することの検証はし ない。 - ファイルが変更、削除、移動しても自動的に更新 されない。 - OSファイルの命名規則に従わない(大文字小文 字の区別や使用禁止文字)。 テーブルや列への アクセス権限とは無関係 OSファイルの適切なパーミッションを行う必要が ある。/var/www/html/配下などにファイルを保 存してしまうと予期せぬ参照が行われる可能性 がある。
23.
アンチパターンの見つけ方
24.
次の質問への答えが曖昧であったり、即答できないようである ならば、きちんと検討されないまま、外部ファイルの使用が採用 されている可能性が高い。 • 「データバックアップとリストアの手順は確立されているか」、「バックアッ プの検証方法はどうか」、「クリーンサーバーやバックアップを実施した サーバーとは別サーバーで、データのリストアをテストしたか」 • 「画像が増える一方になるのではなく、不要になった時にシステムから削 除されるような仕組みになっているか」、「不要な画像ファイルを削除する 手順はあるか」、「その手順は自動化されているか、それとも手動か」 •
「画像ファイルへのアクセス権を持っているアプリケーションユーザは誰 か」、「アクセス権はどのように適用されているか」、「権限を持たない画 像を参照するリクエストをした場合、ユーザには何が表示されるか」 • 「画像に対する変更をキャンセルできるか」、「キャンセルできる場合、ア プリケーションは前の状態に復旧できるか」
25.
いろいろ書いてあるけど 画像や動画扱う場合は 大抵やっている。 大事なのは検討したか否か。
26.
アンチパターンを用いてよい場合
27.
データベースの容量を減らせる
28.
データベースの容量を減らせる =バックアップが短時間 =バックアップファイルの容量も
29.
メディアファイルは データベース外にあるので 単体や一括での扱いが楽
30.
アンチパターンにメリットがあって 問題点が深刻じゃなければ 採用もおk
31.
大容量メディアファイルを外部ファ イルに格納することが常に最善の 方法であるという一般論に従うの ではなく、十分な情報に基づき、 よく検討して上で判断
32.
解決策: 必要に応じてBLOB型を採用する (DBMS内で完結)
33.
BLOB型を採用した場合、「アンチパターン」のすべての問題が 解決できる。 • 画像データはデータベースに格納されるので、読み込みのための追加の ステップは不要です。誤ったファイルパスを格納するというリスクもありま せん。 • 行を削除すると、自動的に画像も削除されます。 •
画像の変更は、コミットするまで、他のクライアントには見えません。 • トランザクションをロールバックすると、画像を以前の状態に復元できま す。 • 行の更新時は、ロックが行われます。このため、他のクライアントは同時 に同じ画像を更新できません。 • データベースのバックアップには、すべての画像が含まれます。 • SQLの権限管理によって、行と画像へのアクセスを管理できます。
34.
Oracle MySQL PostgreSQL
SQL Server BLOB型 最大4GB(9i) 最大128TB(10g) 最大64KB (※1) - - TINYBLOB型 - 最大255B - - MEDIUMBLOB型 - 最大16MB - - LONGBLOB型 - 最大4GB - - ラージオブジェクト - - 最大4GB - varbinary 型 - - - 最大2GB Image型 - - - 最大2GB Railsでカラムをbinaryで指定するとBLOB型(64KB)になる。64KB以上のオブジェクトを 保存したい場合は、limitで上限サイズを指定する。 ※1 ファイルを透過的に扱うためのデータ型としてBFILE(Oracle)やFILESTREAM(SQL Server)もある。尚、BFILEはトランザクション制御外である。 ※
35.
パフォーマンスをとるか セキュリティや整合性をとるか
36.
ぶっちゃけBLOBは扱いがめんどい
37.
LOBロケータとか 特別な機能使ったりして データ登録する必要がある。
38.
8章メタデータトリブル 8.5.2
39.
大容量メディアデータを Webサーバから クライアントに送信するのは 回避したいので サーバを分散させたい。
40.
CDP:Web Storageパターン & CDP:URL Rewritingパターン ※
但し、画像ファイルなどが第三者に参照されても問題ないか、ファイル名に連続性 がなく予測も難しい場合に限る。
41.
まとめ: データベース外部のリソースは、 データベースでは 管理できないことに注意しましょう。
42.
以上、 ご清聴ありがとうございました。
Download