狠狠撸
Submit Search
A development journal of koremirudb1 cloud&nosql (1)
?
1 like
?
469 views
Masato Tsuji
Follow
これみるDBの開発で利用したテクノロジーの紹介 第一回目はクラウド、Google App Engine、
Read less
Read more
1 of 42
Download now
Download to read offline
More Related Content
A development journal of koremirudb1 cloud&nosql (1)
1.
これみるDB開発記 テクノロジー解説
2.
これみるDBのテクノロジ これみるDBでは技術の習得がもう一つの目的で す。そのため実務で役立つ、以下のキーワードに 沿ったテクノロジーを選定しています。 ●
クラウド ● NO-SQL(+キャッシュ) ● モバイル(Jquery×Boostrap) ● WEB-API(Json) ● Java最新フレームワーク
3.
各テクノロジーを複数回に分けて解説しま す。 第1回 クラウド×NO-SQL(+キャッシュ) 第2回 モバイル(Jquery×Boostrap) 第3回 WEB-API(Json) 第4回 Java最新フレームワーク
4.
第1章 クラウドおさらい
5.
クラウド これみるDBの基盤はGoogle AppEngine(以降 GAE)です。 クラウドおさらい 現在あまたのクラウドサービスがある中で、世界的に名前が知 られていて、エンタープライズでの実績を積み上げているのは 以下の3社 Google AppEngine(GOOGLE) Amazon
Web Service(AMAZON) AZURE(Microsoft)
6.
クラウド また規模は小さいがスタートアップ企業で注目されているのは 以下の2社 私の目についたもの Heroku (実はAWSの上でサービス提供している) さくらクラウド
7.
クラウド そもそもクラウドの定義はいろいろありますが もともとはIaaS(インフラアズアサービス)、PaaS(プラットホー ムアズアサービス)の登場以降バズワードとして流行った言葉。 今後クラウド=PaaSとして使いますが、定義は以下 ?ハードとネットワーク ?アプリケーションサーバとDBサーバー を提供してくれてかつ ?利用料に応じての課金 ?簡単なスケールアウト を用意してくれるサービスのこと
8.
クラウド クラウドの整理 出展 http://itpro.nikkeibp.co.jp/article/Keyword/20110216/357282/
9.
クラウド クラウドのメリット(一言で言うと) ?アプリケーションの開発に専念できる ○ハードのEOSLがない (ただし、PaaSの環境変化はあるはず。 たとえばJava基盤のバージョンアップとか) ○基盤費用考えずに使った分だけ課金 (基盤費用だけで言えば自前より安い) ○スケーラブルとか考えなくて良い (動的でスケーラブルな基盤がクラウドの特徴) ○サーバー監視もいらない ○ハード障害を考えなくて良い
10.
クラウド クラウドのデメリット(二言で言うと) ?各環境独自の制約がある ?基盤のコントロールができない 特に後者についてGAEやAWSでは年に数回の頻度で数時間 ~半日程度の応答不可になる障害が発生している その際 ?手も足も出ない?自分では是正も出来ない ためエンタープライズ利用は顧客との握りが必要でそこがハー ドルが高い
11.
クラウド 最近の各クラウド 大規模障害の原因と障害時間 AWS
GAE AZURE 2012年12月24日~25日 2012年10月29日 2012年7月26日 LB 1日 ルーター 半日 ネット機器設定 2時間半 2012年10月22日 2012年2月29日 メモリリーク 半日 うるう年ロジック 半日 2012年06月29日 落雷停電に伴う電源障害 参考( 2011年4月に4日間の障害) 参考( 2010年2月24日 一日の障害) 参考( 2011年9月9日 半日) ちなみに各クラウドのSLAは AWS(EC2),AZURE(インスタンス)、GAEいずれも 99.95%稼 働(1年で4時間38分停止)を保障 これを守れない場合、ルールに基づき利用料一部返金。だけ
12.
クラウド 各クラウドの趨勢 エンタープライズ利用ではAWSが圧勝 GAE、AZUREは苦戦 各クラウドサービスを一言で言うと以下の通り AWSはなんでもできる (IaaSとして利用/RDB利用/No-SQLDB利用/専用線直結/他のPaaSのバックエン ドとして利用されていたりもする) GAEは独自路線 RDBが利用出来ず、独自のNo-SQLDBを使う必要がある。 AZUREは出遅れ 当初Macrosoft製品ロックアップがあった/後発なので出遅れ
13.
クラウド 参考※http://jp.techcrunch.com/archives/20121217forrester-report-shows-amazon-aws-reigns-supreme-with-developers-as-windows-azure- gains-momentum/
14.
クラウド その他、クラウドに関する読み物 http://www.atmarkit.co. jp/fjava/rensai4/devtool25/devtool25_1.html http://techtarget.itmedia.co. jp/tt/news/1204/26/news01.html http://d.hatena.ne. jp/arahk/20110608/1307517071
15.
第2章 狈翱-厂蚕尝
16.
これみるDB×クラウド これみるDBはGAEを利用しています。 理由は ?今後の潮流であるNO-SQLの学習ができる ?無料枠がある ?後から知ったのですが(BigData解析ができたりし てもう一つのバズワードBigDataについてが勉強で きる)
17.
GAE NO-SQL GAEではRDBは利用出来ず、Datastoreという列 NO-SQLDBを利用する必要があります。 そもそもNO-SQLはRDBに対応する概念です。 通常のアプリケーション3層構造ではWEBは拡張できてもDB は拡張できないので、DBがボトルネックになります。 また往々にして、高性能な商業DBはハードソフトともに高価。 WEB
WEB スケールアウト可能 サー サーバー バー データの一元管理が必要なのでスケー DBサーバー ルアップしかできない (ほんとはパーティションとかあるけど)
18.
GAE NO-SQL またRDBの場合、データの肥大化により、検索速度の低下が 発生します。
データを全件検索しないと いけないので、データ量増=検索 ??????? 速度の低下
19.
GAE NO-SQL 一方で、NO-SQLはRDBのリレーション機能を犠牲にしてス ケーラブルで素早い検索を可能にします。 例)memcached(分散メモリ)NO-SQLの一種のスケールアウト 図
WEB WEB サー サーバー バー Memcached分散機構
20.
GAE NO-SQL memcachedの検索
パラレルに検索できるので データが増えても検索速度をスケールアウトできる そしてオープンソースのものが主流です。 「memcached」mixiで利用。 「Apache Cassandra」 facebookで利用
21.
GAE NO-SQL まとめると ?スケーラブル。スケーラブル。スケーラブル ?設定いらず(付随的に) データが何億あっても大丈夫。 検索にかかる時間は同じ。ほんとです。 RDBと違いのキッティング、チューニング不要。すぐ使える。 スキーマレスなので、行ごとにテーブルレイアウト 変えても良い
22.
GAE NO-SQL もちろんデメリットもあります。 ?SQLの標準機能がいろいろ使えない JOIN/SUM/COUNT/UNION/(排他制御)/(部分検索)/not in/ 入子検索
23.
GAE NO-SQL ?使って痛いのは。データの調査、修正を行うときにSQLが使えない。 ※これは環境によってはSQLライクなものが用意されているかもしれません が、結局JOINやNOT inなど使えません。 Datastoreからのデータ取り出し SQL package
tutorial.controller.twitter; select * from TABLE import org.slim3.controller.Controller; import org.slim3.controller.Navigation; WHERE A=B public class IndexController extends Controller { @Override public Navigation run() throws Exception { TableMeta e = TableMeta.get(); List<Employee> list = Datastore.query(e) .filter(e.A.greaterEqural(B)) .sort(e.salary.asc) .asList(); requestScope("list", list); return forward("index.jsp"); } }
24.
GAE NO-SQL (SQLについての読み物) 詳細は以下に詳しくまとまってます。 NO-SQL http://www.atmarkit.co. jp/flinux/rensai/noSQL/noSQL_01/01_1.html GAE(Bigtableの詳しい内容) http://d.hatena.ne. jp/kazunori_279/20090617/1245224939
25.
第3章 骋础贰
GOOGLE APP ENGINE で無料開発 でも苦労も多いよ
26.
GAE GAEに話をもどします。 Datastore以外に関しても、GAEは独自の特徴が あります。 代表的なものとして、 ?Socket通信不可(80番HTTP通信のみ) ?すべてのHTTPは30秒で完了させる必要がある
27.
GAE GAEの業務利用 制約が多いのでやめたほうがよい。 ほとんどすべてのアプリケーション、開発者はRDBを前提として 考えているので「イノベーティブ」な開発以外では使えない。 無料なので、R&Dとかお勉強とか部内ツールとかそういうのに は便利。
28.
GAE 言い方を変えるとこんな場合にGAEを使う意味があります。 ?スケーラブルな環境が必要 (RDBを辞めてわざわざDatastoreを使う目的) ?データ量が億単位 (RDBを辞めてわざわざDatastoreを使う目的) ?初期投資を抑えたい ?少人数での開発 (新しい技術に関して、密にコミュニケーション取りながら学習できて 効率が良い) ?SLAが比較的緩やか (基盤障害があっても是正出来ないので) 例としてユーザーが大量にいる広告収入で稼ぐのBtoCサイトなど
29.
GAE 業務利用に関してその2 現時点では使いづらいGAEですが、次々にサービ スを増やしているので、今後の展開次第では良い 物になっていくと思います。 注目は以下の機能追加 ?SQLサポート(GOOGE CLOUD SQL) ?BigData解析機能(Bigquery
api) ?FullTextSerch機能
30.
GAE NO-SQL GAE NO-SQL環境を実装する上での ベスト?プラクティスと呼ばれるものを紹介します。 1. でっかいテーブルを用意する 業務分析→正規化→使いやすい形に(画面に合わせでっかいテーブル) 2. Insert頑張る/Read頑張らない 3.
キャッシュを使う
31.
GAE でっかいテーブルを用意する RDBの世界では正規化が基本。 正規化の主目的は「重複なくデータを管理」する。 重複なく管理することで ?更新は一回でいい。 そのことによって ?参照するときにデータの整合性が保証されていると安心してい られる。 ※データが正規化されていないと、重複があるデータ全てに漏 れ無く更新を使う必要があり、安心してられない。
32.
GAE でっかいテーブルを用意する NO-SQLの世界はリレーションが使えないので、 「JOIN済みのでっかいテーブルを作る」が基本。 その時はデータ洗い出し?正規化?でっかいテーブルと設計す る。一度正規化しておくことで、更新時に更新すべき対象がもれ なく把握できる。
33.
骋础贰 でっかいテーブルを用意する例
これみる映画テーブル(抜粋) 映画ID 米映画名 日本映画名 上映時間 米上映日 日上映日 でっ かい 上映時間 画像 画像評価 画像言語 ポスタ ポスタ評価 ポスタ言語 テー ブル 観客評価 評論家評価 スコア 更新日 バージョン番号 映画テーブル 映画ID 米映画名 上映時間 評論家評価 観客評価 スコア 正 規 翻訳テーブル 化 映画ID 項目 言語 データ テ ー ブ 画像テーブル ル 映画ID 画像種 画像サイズ 画像言語 画像評価 画像データ
34.
GAE でっかいテーブルを用意する 使うときはみんなででっかいテーブルを参照/更新 する
35.
GAE でっかいテーブルを用意する 注意しなくてはいけないのは、でっかすぎるテーブ ル。更新頻度に着目しよう
これみる映画テーブル(抜粋) 映画ID 米映画名 日本映画名 上映時間 米上映日 日上映日 でっ かい 上映時間 画像 画像評価 画像言語 ポスタ ポスタ評価 ポスタ言語 テー ブル 観客評価 評論家評価 like件数 スコア 更新日 バージョン番号 [コメント配列 ] [評論配列] like件数 更新頻度が違うもの を入れては ダメ
36.
GAE でっかいテーブルを用意する 素直にテーブルを分けて、キーコード指定で別々 に呼び出しましょう 更新頻度が高いものをでっかいテーブルに入れるとロック待ち が発生し、レスポンス低下になります。
これみる映画テーブル(抜粋) でっ 映画ID 米映画名 日本映画名 上映時間 米上映日 日上映日 かい 上映時間 画像 画像評価 画像言語 ポスタ ポスタ評価 ポスタ言語 テー ブル 観客評価 評論家評価 like件数 スコア 更新日 バージョン番号 Likeテーブル コメントテーブル 評論テーブル 映画ID Like件数 映画ID コメント 映画ID 評論
37.
GAE Insertがんばる ?count()が利用できないので、レコード件数がわか りません。Insertで頑張ります。 毎回カウントするのではなく、カウントテーブルを別に用意して、 更新時に件数をインクリメントするのが正解。 例えばコメント件数を画面に出したいときは、コメントが投稿され たときに、件数テーブルをインクリメント。 ※しかもDatastoreからデータをreadすると1件当たりで課金に 効いてきます。(レコードが1万件あって、それをjavaでカウント すると、Dataread1万になり、いきなり無料枠Over)
38.
GAE Insertがんばる PVカウンタなど更新が激しいものは、1レコードに 対してインクリメントにするとア、ロック解除待ちが 発生します。そんな時はシャーディング
書き込みの時にはどれか一つをインクリメント(ロックが 1/4) 同じ項目についての カウンタを複数作成す る(シャードを作成す カウンタ A カウンタ B カウンタ C カウンタ D る) リードの時は全部読んで合算(リード件数シャードが4の場合 4件)
39.
GAE キャッシュを使う キャッシュを使う基本3原則です。 1.キャッシュを探し、あればキャッシュを使う 2.なければdbからとってきてキャシュに詰める 3.有効期限は設定する。 DBアクセスはコストがかかるので、極力キャッシュを使います。 GAEではmemcachedに似たmemcacheが用意されています。
40.
GAE キャッシュを使う キャッシュを利用する際は、キャッシュの更新忘れ に注意!データが修正されたり、追加されるときは キャッシュを削除する。 わざわざ消すの面倒な場合、キャッシュの有効期 限を設定して、自動的に消されるようにすれば、 OK。キャッシュの有効期限は重要です。
41.
GAE キャッシュを使う キャッシュはどんなアプリでも有効な手段です。 ?参照/更新頻度が高い ?DBやファイルアクセスが発生する といった場合キャッシュ化でレスポンス改善が可能 です。 たとえば、画面参照のたびにログイン情報を逐一DB参照する 場合などはキャッシュ化することで性能改善が図れると思われ ます。
42.
GAE GAE説明(OFFICIAL 超わかりやすい) https://developers.google.com/appengine/? hl=ja 作ればわかるGoogle APP Engine
Download