• 検索結果がありません。

勉強会 資料 Google Developer Group 京都 ajnk1

N/A
N/A
Protected

Academic year: 2018

シェア "勉強会 資料 Google Developer Group 京都 ajnk1"

Copied!
93
0
0

読み込み中.... (全文を見る)

全文

(1)

Google App Engine:

Datastore を理解しよう

@bufferings

2010/03/26

#appengine ja night in kansai 1 ( #ajnk1 )

(2)

自己紹介

@bufferings

Slim3 サイトの日本語化

http://sites.google.com/site/slim3documentja/

Kotori Web JUnit Runner

(3)

#appengine ja night in kansai 1 ( #ajnk1 ) 3

#appengine ja night

(4)

#appengine ja night

in kansai

(5)

#appengine ja night in kansai 1 ( #ajnk1 ) 5

京都 GTUG とは ?

正式名称

「Kyoto Google Technology User Group」

Kyoto GTUG

目的

純粋・シンプルにGoogleのテクノロジーを

理解・習得するための活動をする。

(これは、世界中のGTUG共通の目的)

*漢字表記の「京都GTUG」は国内のみの利用でお願いします。

(6)

Google Technology User Group

現在、全世界で 27 ヶ国 60 を超える地域でローカ

ルな GTUG が設立されています。

http://www.gtugs.org/directory

各地域で、 Google のテクノロジーに興味のある

方々が組織を立ち上げています。

将来的には、地域を越えたイベントもやりたいよ

ね!という話が、マネージャの ML でやりとりされて

(7)

#appengine ja night in kansai 1 ( #ajnk1 ) 7

京都 GTUG へ!

まだ、参加してない方はぜひ参加して下さいね!

京都 GTUG

http://kyoto-gtug.org/

京都 GTUG (Google Group)

http://group.kyoto-gtug.org/

(8)

後援:京都リサーチパーク株式会社

京都リサーチパーク株式会社

http://www.krp.co.jp/

この会場は、京都リサーチパーク株式会社の後援

によりご提供していただいております。

(9)

#appengine ja night in kansai 1 ( #ajnk1 ) 9

Agenda

Introduction

Entity & Entities Table

Entity Group & Transaction

Query & Index Tables

(10)

Introduction

Google App Engine

Datastore

Datastore API

Bigtable

Datastore 脳

(11)

#appengine ja night in kansai 1 ( #ajnk1 ) 11

Google App Engine

(12)

Google App Engine

(13)

#appengine ja night in kansai 1 ( #ajnk1 ) 13

Introduction

Google App Engine

Datastore

Datastore API

Bigtable

Datastore 脳

(14)

Datastore

(15)

#appengine ja night in kansai 1 ( #ajnk1 ) 15

Introduction

Google App Engine

Datastore

Datastore API

Bigtable

Datastore 脳

(16)

Datastore API

(17)

#appengine ja night in kansai 1 ( #ajnk1 ) 17

Datastore API

(18)

Introduction

Google App Engine

Datastore

Datastore API

Bigtable

Datastore 脳

(19)

#appengine ja night in kansai 1 ( #ajnk1 ) 19

Bigtable

(20)

Introduction

Google App Engine

Datastore

Datastore API

Bigtable

Datastore 脳

(21)

#appengine ja night in kansai 1 ( #ajnk1 ) 21

Datastore 脳

(22)

Datastore 脳を手に入れるために

まずは

Datastore を理解しよう

(23)

#appengine ja night in kansai 1 ( #ajnk1 ) 23

Entity & Entities Table

Datastore はどのように

データを格納するのかな?

(24)

Entity & Entities Table

Entity

Kind

Bigtable

Entities Table

データ型

押さえておきたいコト

(25)

#appengine ja night in kansai 1 ( #ajnk1 ) 25

Entity

(26)

Entity

(27)

#appengine ja night in kansai 1 ( #ajnk1 ) 27

Entity

(28)

Entity

(29)

#appengine ja night in kansai 1 ( #ajnk1 ) 29

Entity

(30)

Entity

(31)

#appengine ja night in kansai 1 ( #ajnk1 ) 31

Entity

(32)

Entity > 例

(33)

#appengine ja night in kansai 1 ( #ajnk1 ) 33

Entity & Entities Table

Entity

Kind

Bigtable

Entities Table

データ型

押さえておきたいコト

(34)

Kind

(35)

#appengine ja night in kansai 1 ( #ajnk1 ) 35

Entity & Entities Table

Entity

Kind

Bigtable

Entities Table

データ型

押さえておきたいコト

(36)

Bigtable

Row name Row data

A distributed, shared, sorted Array

(37)

#appengine ja night in kansai 1 ( #ajnk1 ) 37

Entity & Entities Table

Entity

Kind

Bigtable

Entities Table

データ型

押さえておきたいコト

(38)

Entities Table

(39)

#appengine ja night in kansai 1 ( #ajnk1 ) 39

Entities Table

(40)

Entities Table

Path

(41)

#appengine ja night in kansai 1 ( #ajnk1 ) 41

Entities Table

(42)

Entities Table

Protocol Buffers

Bigtable や Google Wave で実運用されている

オープンソースのシリアライザー

http://code.google.com/p/protobuf/

(43)

#appengine ja night in kansai 1 ( #ajnk1 ) 43

Entities Table

(44)

Entities Table > 例

(45)

#appengine ja night in kansai 1 ( #ajnk1 ) 45

Entity & Entities Table

Entity

Kind

Bigtable

Entities Table

データ型

押さえておきたいコト

(46)

データ型 1

ソート順 備考

java.lang.String Unicode バイト順 ブール値

整数 数値

浮動小数点数 数値

java.util.Date 時系列

列挙 java.lang.Enum Unicode

com.google.appengine.api.users.User

長いテキスト文字列 com.google.appengine.api.datastore.Text (順序付け不可) インデックス化されません。 長いバイト文字列 com.google.appengine.api.datastore.Blob (順序付け不可) インデックス化されません。

Java クラス 短いテキスト文字列(500文

字以下)

500文字よりも長い場合は IllegalArgumentException 短いテキスト文字列(500文

字以下)

com.google.appengine.api.datastore.Short Blob

500バイトよりも長い場合は IllegalArgumentException boolean or java.lang.Boolean false < true  

short, java.lang.Short, int, java.lang.Intege r,long, java.lang.Long

長整数として格納された後、フィールド型 に変換されます。範囲外の値はオーバー フローします。

float, java.lang.Float, double, java.lang.Dou ble

倍精度浮動小数点数として格納された後

、フィールド型に変換されます。範囲外の 値はオーバーフローします。

日付/時刻  

Enum#name()の文字列が格納されます。 Google アカウント

メール アドレス

(Unicode)  

com.google.appengine.api.datastore.Key, パス要素単位(種

(47)

#appengine ja night in kansai 1 ( #ajnk1 ) 47

データ型 2

ソート順 備考

カテゴリー Unicode

メールアドレス com.google.appengine.api.datastore.Email Unicode

緯度の後に経度 Unicode

URL com.google.appengine.api.datastore.Link Unicode

電話番号 Unicode

郵便番号 Unicode

数値 Java クラス

com.google.appengine.api.datastore.Categ

ory  

  浮動小数点の緯度と経度

の座標で表される地点

com.google.appengine.api.datastore.GeoP

t  

インスタント メッセージング ハンドル

com.google.appengine.api.datastore.IMHan

dle  

  com.google.appengine.api.datastore.Phon

eNumber  

com.google.appengine.api.datastore.Postal

Address  

コンテンツについてユーザ ーが入力する評価(0 ~ 100 の整数)

com.google.appengine.api.datastore.Ratin

g  

(48)

データ型 3

複数値

1つのプロパティ名に対して、コア型からなる複

数の値を持つことができる

(49)

#appengine ja night in kansai 1 ( #ajnk1 ) 49

データ型 4

シリアライズ可能クラスは BLOB 値として保存

複数値の要素として BLOB で保持することもできる

(50)

Entity & Entities Table

Entity

Kind

Bigtable

Entities Table

データ型

押さえておきたいコト

(51)

#appengine ja night in kansai 1 ( #ajnk1 ) 51

ソフトスキーマ

(52)

Null 値と Unset

(53)

#appengine ja night in kansai 1 ( #ajnk1 ) 53

Kind とスキーマ

(54)

Entity Group & Transaction

Transaction

はどんな感じ?

(55)

#appengine ja night in kansai 1 ( #ajnk1 ) 55

Bigtable & Datastore

Entity Group

Transaction

押さえておきたいコト

Global Transaction

Entity Group & Transaction

(56)

Bigtable & Datastore

Bigtable

行単位の ACID をサポート

Datastore

Entity Group 単位の ACID をサポート

(57)

#appengine ja night in kansai 1 ( #ajnk1 ) 57

Bigtable & Datastore

Entity Group

Transaction

押さえておきたいコト

Global Transaction

Entity Group & Transaction

(58)

Entity Group

(59)

#appengine ja night in kansai 1 ( #ajnk1 ) 59

Entity Group

(60)

Entity Group

(61)

#appengine ja night in kansai 1 ( #ajnk1 ) 61

Entity Group

(62)

Entity Group

(63)

#appengine ja night in kansai 1 ( #ajnk1 ) 63

Entity Group

(64)

Entity Group

(65)

#appengine ja night in kansai 1 ( #ajnk1 ) 65

Entity Group

(66)

Entity Group

(67)

#appengine ja night in kansai 1 ( #ajnk1 ) 67

Entity Group

(68)

Bigtable & Datastore

Entity Group

Transaction

押さえておきたいコト

Global Transaction

Entity Group & Transaction

(69)

#appengine ja night in kansai 1 ( #ajnk1 ) 69

Transaction > 例 : カウンター

(70)

Transaction > 例 : カウンター

(71)

#appengine ja night in kansai 1 ( #ajnk1 ) 71

Transaction > 例 : カウンター

(72)

Transaction > 例 : カウンター

(73)

#appengine ja night in kansai 1 ( #ajnk1 ) 73

Transaction > 例 : カウンター

(74)

Transaction > 範囲

(75)

#appengine ja night in kansai 1 ( #ajnk1 ) 75

Transaction > 範囲

(76)

Transaction > 仕組み

(77)

#appengine ja night in kansai 1 ( #ajnk1 ) 77

Transaction > 仕組み

Timestamp を使用した楽観的並行性制御

(78)

Transaction > 例 : ユニーク制約

(79)

#appengine ja night in kansai 1 ( #ajnk1 ) 79

Transaction > 使用可能なクエリ

(80)

Transaction > 使用可能なクエリ

(81)

#appengine ja night in kansai 1 ( #ajnk1 ) 81

Transaction > Read

Tx 外では READ_COMMITED 相当

(82)

Transaction > Read

Tx 内では SERIALIZABLE 相当

(83)

#appengine ja night in kansai 1 ( #ajnk1 ) 83

Transaction > Read

Tx 内では自分の行った変更も見られない

(84)

Bigtable & Datastore

Entity Group

Transaction

押さえておきたいコト

Global Transaction

Entity Group & Transaction

(85)

#appengine ja night in kansai 1 ( #ajnk1 ) 85

ポイント

所属 EG は Entity 作成時に決まり、変更できない

EG を大きくすると Tx で独占する Entity が多くなる

衝突の可能性が高くなる

EG はできるだけ小さくする

Tx を必要としない場合は EG ではなく Key による

関連にする

(86)

Bigtable & Datastore

Entity Group

Transaction

押さえておきたいコト

Global Transaction

Entity Group & Transaction

(87)

#appengine ja night in kansai 1 ( #ajnk1 ) 87

Global Transaction

Slim3 には

Global Transaction があります

(!?)

(88)

参考資料

Developer’s Guide - Google App Engine

注:日本語の情報は古いので読むなら英語

http://code.google.com/intl/en/appengine/docs/

Mastering the datastore - Google App Engine

http://code.google.com/intl/en/appengine/articles/datastore/overview.html

Slim3

Slim3 を使うなら公式ドキュメントの JDO 読まずに Slim3 の Datastore を読めば良い

http://sites.google.com/site/slim3appengine/

Slim3: 日本語訳

(89)

#appengine ja night in kansai 1 ( #ajnk1 ) 89

参考資料

Under the Covers of the Google App Engine Datastore

http://sites.google.com/site/io/under-the-covers-of-the-google-app-engine-datastore

スライドは

http://snarfed.org/space/datastore_talk.html

[PDF] Google I/O 2009 - From Spark Plug to Drive Train:Life of an App Engine Request

http://dl.google.com/io/2009/pres/W_1115_From_Spark_Plug_To_Drive_Train_Life_of_an_App_Engine_Request.pdf

Google App Engine - Devfest India 2010

http://www.slideshare.net/chanezon/google-app-engine-devfest-india-2010

Bigtable: A Distributed Storage System for Structured Data

http://labs.google.com/papers/bigtable.html

(90)

参考資料

京都 GTUG 勉強会資料

http://sites.google.com/a/kyoto-gtug.org/home/docs

[PDF] Google App Engine Hackathon in Kyoto 事前勉強会 その1用資料

http://blog.daisukeyamashita.com/blog-files/Google%20App%20Engine%20Hackathon%202009-07-17.pdf

[PDF] Google App Engine Hackathon in Kyoto 事前勉強会 その 2 用資料

http://blog.daisukeyamashita.com/blog-files/Google%20App%20Engine%20Hackathon%202009-07-24.pdf

Google App Engine for Java を使ってみよう!: CodeZine (コードジン)

http://codezine.jp/article/corner/289

分散 Key-Value ストアの本命「 Bigtable 」 - @IT

(91)

#appengine ja night in kansai 1 ( #ajnk1 ) 91

参考資料

@kazunori_279 さんの書庫

http://d.hatena.ne.jp/kazunori_279

参考になる記事が沢山。特にこれを何度も見た。

http://d.hatena.ne.jp/kazunori_279/20090617/1245224939

@shin1ogawa さんのスライド集

http://www.slideshare.net/shin1ogawa/presentations

@ashigeru さんの宝箱

http://gist.github.com/294650

@ashigeru さんの Transaction Puzzlers

http://www.slideshare.net/ashigeru/ajn4

Life is beautiful: Google App Engine 上のベスト・プラクティス、その1 : Datastore

http://satoshi.blogs.com/life/2010/02/app_engine.html

(92)

参考資料

Google を支える技術 ~ 巨大システムの内側の世界

http://www.amazon.co.jp/o/ASIN/4774134325

Google App Engine for Java [ 実践 ] クラウドシステム構築

http://www.amazon.co.jp/o/ASIN/4774139858

Programming Google App Engine

http://www.amazon.co.jp/o/ASIN/059652272X

雲の世界の向こうをつかむ クラウドの技術

http://www.amazon.co.jp/o/ASIN/4048680641

(93)

#appengine ja night in kansai 1 ( #ajnk1 ) 93

ありがとうございました

参照

関連したドキュメント

This paper presents an investigation into the mechanics of this specific problem and develops an analytical approach that accounts for the effects of geometrical and material data on

Khovanov associated to each local move on a link diagram a homomorphism between the homology groups of its source and target diagrams.. In this section we describe how this

Moreover, in fashioning his theory of semisimple groups, Weyl drew on a host of ideas from such historically disparate areas as Frobe- nius’ theory of finite group characters,

The PCA9535E and PCA9535EC provide an open−drain interrupt output which is activated when any input state differs from its corresponding input port register state.. The interrupt

 右上の「ログイン」から Google アカウント でログインあるいは同じ PC であると⼆回⽬以

Google マップ上で誰もがその情報を閲覧することが可能となる。Google マイマップは、Google マップの情報を基に作成されるため、Google

Pursuit may be applied in a tank mix with a registered grass herbicide or applied preemergence following a preplant incorporated application of a registered grass

Next, to investigate the valve train dynamic characteristics, we change the shape of the cam profile, especially the shape of the cam lift-acceleration (jerk) curve as the