際際滷

際際滷Share a Scribd company logo
Google App Engine:
Datastore のクエリを
尖盾しよう

@bufferings
2010/07/31

appengine ja night #9
徭失府初
                       @bufferings



¢
    #appengine ja night in kansai
    http://www.ustream.tv/channel/ajnk
¢
    Slim3 サイトの晩云Z晒
    http://sites.google.com/site/slim3documentja/
¢
    Kotori Web JUnit Runner(ktrwjr こと`じゃ )
    http://code.google.com/p/ktrwjr/
2                     appengine ja night #9
クエリの念に




3    appengine ja night #9
Datastore




4   appengine ja night #9
Bigtable




5   appengine ja night #9
Bigtable
    A distributed, shareded, sorted Array
        Row name            Row data




6              appengine ja night #9
Entity




7   appengine ja night #9
Entity




8   appengine ja night #9
Entities Table




9     appengine ja night #9
Entities Table
     Path




10            appengine ja night #9
Entities Table > 箭




     ☆ この蹐聾田蹐任后gHのg廾を燕すものではありません。


11             appengine ja night #9
ソフトスキ`マ




12   #appengine ja night in kansai 2 ( #ajnk2 )
Null 、 Missing




13   #appengine ja night in kansai 2 ( #ajnk2 )
Query & Index Tables
¢
     Bigtable からのデ`タ函誼
¢
     Datastore からのデ`タ函誼
¢
     Query
¢
     Query と Index
¢
     Merge Join
¢
     崙s
¢
     Query と MVP

14                   appengine ja night #9
Read




15   appengine ja night #9
Prefix Scan




16    appengine ja night #9
Range Scan




17    appengine ja night #9
Query & Index Tables
¢
     Bigtable からのデ`タ函誼
¢
     Datastore からのデ`タ函誼
¢
     Query
¢
     Query と Index
¢
     Merge Join
¢
     崙s
¢
     Query と MVP

18                   appengine ja night #9
Get




19   appengine ja night #9
Get
¢
     Key = MyApp/Person(1)/Person(10)




20                  appengine ja night #9
┣凌治 Batch Get




21      appengine ja night #9
Query




22   appengine ja night #9
Query




23   appengine ja night #9
Query




24   appengine ja night #9
Index
¢
     聞喘する畠ての Query にして Index が駅勣
¢
     い栽わせrの麻?鹿s? Join はできない
¢
     プロパティの匯何を卦すことはできない
     ( キ`だけを卦すことは辛嬬 )
¢
     Entity を厚仟したらvSする Index が厚仟される




25              appengine ja night #9
Query & Index Tables
¢
     Bigtable からのデ`タ函誼
¢
     Datastore からのデ`タ函誼
¢
     Query
¢
     Query と Index
¢
     Merge Join
¢
     崙s
¢
     Query と MVP

26                   appengine ja night #9
Query の撹
                     ¢
                         Kind を峺協
                     ¢
                         0 參貧のフィルタを峺協
                         =, <=, <, >, >=, !=, IN
                     ¢
                         0 參貧のソ`トを峺協
                         ASC, DESC



     ☆Kind を峺協しない Kindless Query という蒙eな
     Nの Query もあります
27              appengine ja night #9
Query と Kind
¢
     Query はg匯の Kind の Entity だけを函誼
     ★これが Kind の麼な朕議




28               appengine ja night #9
崙s
¢
     あるプロパティをフィルタまたはソ`トするには、そ
     のプロパティが贋壓する駅勣がある
¢
     音吉塀フィルタが聞喘できるのは 1 つのプロパ
     ティに泙蕕譴
¢
     音吉塀フィルタで聞喘されているプロパティは麿の
     ソ`トよりも枠にソ`トする駅勣がある




29           appengine ja night #9
崙s
¢
     あるプロパティをフィルタまたはソ`トするには、そ
     のプロパティが贋壓する駅勣がある
¢         Query の碧Mみを岑ることで
     音吉塀フィルタが聞喘できるのは 1 つのプロパ
          崙sの尖喇がわかります。
     ティに泙蕕譴
¢
             ★ 書晩の朕
     音吉塀フィルタで聞喘されているプロパティは麿の
     ソ`トよりも枠にソ`トする駅勣がある




30           appengine ja night #9
Query & Index Tables
¢
     Bigtable からのデ`タ函誼
¢
     Datastore からのデ`タ函誼
¢
     Query
¢
     Query と Index
¢
     Merge Join
¢
     崙s
¢
     Query と MVP

31                   appengine ja night #9
Index Tables
¢
     徭咾牌撹される Index
     ¢
         Kind Index
     ¢
         Single Property Index
¢
     協xが駅勣な Index
     ¢
         Custom Index




32                      appengine ja night #9
Kind Index




33   appengine ja night #9
Kind Index

     ¢
         蒙協の Kind の畠 Entity を函誼




34          appengine ja night #9
Kind Index
 ¢
     蒙協の Kind の畠 Entity を函誼
     ¢
         [Kind] Food




35                     appengine ja night #9
Single Property Index
¢
     ASC




36               appengine ja night #9
Single Property Index
¢
     DESC




37                appengine ja night #9
Single Property Index

      ¢
          1 つのプロパティにする Filter
      ¢
          1 つのプロパティにする Sort
      ¢
          1 つのプロパティにする Filter と Sort




38            appengine ja night #9
Single Property Index
¢
     1 つのプロパティにする Filter
     ¢
         [Filter] name = "Suzuki"




39                      appengine ja night #9
Single Property Index
¢
     1 つのプロパティにする Filter
     ¢
         [Filter] name > "B" and name < "T"




40                     appengine ja night #9
Single Property Index
¢
     1 つのプロパティにする Sort
     ¢
         [Sort] name DESC




41                    appengine ja night #9
Single Property Index
¢
     1 つのプロパティにする Filter と Sort
     ¢
         [Filter] name > "B" and name < "T"
     ¢
         [Sort] name ASC




42                     appengine ja night #9
Custom Index




43     appengine ja night #9
Custom Index

         ¢
             2 つ參貧のプロパティにする Sort
         ¢
             2 つ參貧のプロパティにする Filter
         ¢
             Ancestor と Filter または Sort
         ¢
             Key の週ソ`ト



☆ Merge Join 瘁峰で辛嬬な Query もあります。
44                appengine ja night #9
Custom Index
¢
     Custom Index の協x




45                appengine ja night #9
Custom Index
¢
     2 つ參貧のプロパティにする Sort
¢
     [Sort] height ASC, weight DESC




46                   appengine ja night #9
Custom Index
¢
     2 つ參貧のプロパティにする Filter
¢
     [Filter] lastname = "Suzuki" and
     firstname = "Jiro"




47                    appengine ja night #9
Custom Index
¢
     2 つ參貧のプロパティにする Filter
     ¢
         [Filter] lastname = "Suzuki" and
         firstname >= "B" and firstname < "T"




48                     appengine ja night #9
Custom Index
¢
     2 つ參貧のプロパティにする Filter
     ¢
         [Filter] height >= 170
     ¢
         [Sort] height ASC, weight DESC




49                       appengine ja night #9
Custom Index
¢
     音吉塀フィルタ聞喘rの 3 つのル`ル
¢
     その1
      1 つの音吉塀フィルタと}方の吉塀フィルタがあ
      る栽は、まず吉塀フィルタのプロパティでソ`
      トされ、肝に音吉塀フィルタのプロパティでソ`ト
      されなければならない




50           appengine ja night #9
Custom Index
¢
     [Filter] height >= 165 and weight = 70
¢
     [Sort] height ASC, weight DESC




51                     appengine ja night #9
Custom Index
¢
     音吉塀フィルタ聞喘rの 3 つのル`ル
¢
     その 2
      1 つの音吉塀フィルタと}方のソ`トがある
      栽は、まず音吉塀フィルタのプロパティでソ`トさ
      れ、肝にその麿のプロパティでソ`トされなけれ
      ばならない




52            appengine ja night #9
Custom Index
¢
     [Filter] weight > 60
¢
     [Sort] height ASC, weight DESC




53                     appengine ja night #9
Custom Index
¢
     音吉塀フィルタ聞喘rの 3 つのル`ル
¢
     その 3
      音吉塀フィルタは1つのプロパティにしかm喘で
      きない




54            appengine ja night #9
Custom Index
¢
     [Filter] height >= 170 and weight >= 70




55                     appengine ja night #9
Custom Index
¢
     [Filter] height >= 170 and weight >= 70




56                     appengine ja night #9
Custom Index
¢
     Ancestor と Filter または Sort
     ¢
         Ancestor Query は書晩はh苧しません




57                  appengine ja night #9
Custom Index
¢
     Key の週 Sort には Custom Index が駅勣




58                appengine ja night #9
ここまでのまとめ
¢
     徭咾牌撹される Index
     ¢
         Kind Index
         C 蒙協の Kind の畠 Entity を函誼
     ¢
         Single Property Index
         C 1 つのプロパティにする Filter
         C 1 つのプロパティにする Sort
         C 1 つのプロパティにする Filter と Sort



59                    appengine ja night #9
ここまでのまとめ
¢
     協xが駅勣な Index
     ¢
         Custom Index
         C 2 つ參貧のプロパティにする Sort
         C 2 つ參貧のプロパティにする Filter
         C Ancestor と Filter または Sort
         C キ`の週 Sort




60                      appengine ja night #9
Query & Index Tables
¢
     Bigtable からのデ`タ函誼
¢
     Datastore からのデ`タ函誼
¢
     Query
¢
     Query と Index
¢
     Merge Join
¢
     崙s
¢
     Query と MVP

61                   appengine ja night #9
Merge Join
¢
     }方のプロパティにして吉塀フィルタのみをm喘
     する栽は、 Custom Index を聞喘せずに Query
     をg佩することができる


¢
     訳周
     ¢
         [Filter] 吉塀フィルタのみ
     ¢
         [Sort] なし


62                    appengine ja night #9
Merge Join
¢
     }方の Single Property Index をマ`ジしながら
     沫? "Merge Join"
¢
     Key がソ`トされていることを旋喘して "zig-zag" ア
     ルゴリズムを聞喘




63               appengine ja night #9
Merge Join
¢
     [Filter] a=1 and b=2 and c=3




64                    appengine ja night #9
Merge Join
¢
     [Filter] a=1 and b=2 and c=3




65                    appengine ja night #9
Merge Join
¢
     [Filter] a=1 and b=2 and c=3




66                    appengine ja night #9
Merge Join
¢
     [Filter] a=1 and b=2 and c=3




67                    appengine ja night #9
Merge Join
¢
     [Filter] a=1 and b=2 and c=3




68                    appengine ja night #9
Merge Join
¢
     [Filter] a=1 and b=2 and c=3




69                    appengine ja night #9
Merge Join
¢
     [Filter] a=1 and b=2 and c=3




70                    appengine ja night #9
Merge Join
¢
     [Filter] a=1 and b=2 and c=3




71                    appengine ja night #9
Merge Join
¢
     [Filter] a=1 and b=2 and c=3




72                    appengine ja night #9
Merge Join
¢
     [Filter] a=1 and b=2 and c=3




73                    appengine ja night #9
Merge Join
¢
     デ`タ楚がえてくると Merge Join ではI尖しき
     れなくなる
     ?仝 Custom Index が駅勣々というエラ`になる

¢
     Custom Index が協xされている栽は Merge
     Join せずに Custom Index が聞喘される




74              appengine ja night #9
Query & Index Tables
¢
     Bigtable からのデ`タ函誼
¢
     Datastore からのデ`タ函誼
¢
     Query
¢
     Query と Index
¢
     Merge Join
¢
     崙s
¢
     Query と MVP

75                   appengine ja night #9
崙s
¢
     あるプロパティをフィルタまたはソ`トするには、そ
     のプロパティが贋壓する駅勣がある
¢
     音吉塀フィルタが聞喘できるのは 1 つのプロパ
     ティに泙蕕譴
¢
     音吉塀フィルタで聞喘されているプロパティは麿の
     ソ`トよりも枠にソ`トする駅勣がある




76           appengine ja night #9
Query & Index Tables
¢
     Bigtable からのデ`タ函誼
¢
     Datastore からのデ`タ函誼
¢
     Query
¢
     Query と Index
¢
     Merge Join
¢
     崙s
¢
     Query と MVP

77                   appengine ja night #9
MVP と吉塀フィルタ
¢
     Entity1(Key1)
     ¢
         favorite=["apple", "google"]
¢
     Entity2(Key2)
     ¢
         favorite=["google"]
¢
     Entity3(Key3)
     ¢
         favorite=["orange"]



78                      appengine ja night #9
MVP と吉塀フィルタ




79      appengine ja night #9
MVP と吉塀フィルタ
¢
     [Filter] favorite="google"




80                     appengine ja night #9
MVP と吉塀フィルタ
¢
     リスト坪のいずれかの、吉塀フィルタに匯崑す
     れば函誼される




81           appengine ja night #9
MVP と吉塀フィルタ
¢
     [Filter] favorite="google" and favorite="apple"
¢
     Merge Join によって Entity1 が函誼される




82                     appengine ja night #9
MVP と音吉塀フィルタ
¢
     Entity1(Key1)
     ¢
         val=[1, 3, 5]
¢
     Entity2(Key2)
     ¢
         val=[2, 3, 4]




83                       appengine ja night #9
MVP と音吉塀フィルタ
¢
     Entity1(Key1)
     ¢
         val=[1, 3, 5]
¢
     Entity2(Key2)
     ¢
         val=[2, 3, 4]




84                       appengine ja night #9
MVP と音吉塀フィルタ
¢
     [Filter] val >= 3
¢
     恷兜にマッチしたものが駻辰気譴




85                       appengine ja night #9
MVP とソ`ト
¢
     Entity1(Key1)
     ¢
         val=[1, 3, 5]
¢
     Entity2(Key2)
     ¢
         val=[2, 3, 4]




86                       appengine ja night #9
MVP とソ`ト




87     appengine ja night #9
MVP とソ`ト
¢
     ASC でも DESC でも Entity1,Entity2 のになる




88                appengine ja night #9
インデックス卯k
¢
     MVP にするフィルタを}方隔つ Custom Index を
     恬撹した栽
¢
     Entity1
     ¢
         val1: 勣殆方 10
     ¢
         val2: 勣殆方 10
¢
     Custom Index
     ¢
         [Sort] val1 ASC, val2 ASC
     ?Entity1 の Index は 100 佩になる
89                      appengine ja night #9
インデックス卯k
¢
     1Entity にするインデックス方は 5000 まで
¢
     Entity2
     ¢
         val1: 勣殆方 18
     ¢
         val2: 勣殆方 18
     ¢
         val3: 勣殆方 18
¢
     Query
     ¢
         [Filter] val1=x and val2=y and val3=z
         ? インデックス卯k
90                      appengine ja night #9
インデックス卯k
¢
     Ancestor Query の Custom Index
     ¢
         Ancestor は婢_される
     ¢
         侮い EG を侘撹している栽に MVP とのMみ栽
         わせでインデックス卯kになりやすい




91                  appengine ja night #9
Next gen queries
¢
     Merge Join と Multi Query(Custom Index を聞喘す
     るもの ) のg廾がパワ`アップするらしい
     http://code.google.com/events/io/2010/sessions
     /next-gen-queries-appengine.html




92                   appengine ja night #9
歌深
¢
     Programming Google App Engine
         http://www.amazon.co.jp/o/ASIN/059652272X
¢
     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
¢
     @kazunori_279 さんの仝 GAE/J ってどう聞う拭
         http://d.hatena.ne.jp/kazunori_279/20090617/1245224939
¢
     @ashigeru さんの仝レンジスキャンのアレ々
         http://gist.github.com/294650
¢
     Cacoo ( カク` )
         http://cacoo.com/

93                                   appengine ja night #9
ありがとうございました




94     appengine ja night #9

More Related Content

Google App Engine: Datastore のクエリを 尖盾しよう

  • 1. Google App Engine: Datastore のクエリを 尖盾しよう @bufferings 2010/07/31 appengine ja night #9
  • 2. 徭失府初 @bufferings ¢ #appengine ja night in kansai http://www.ustream.tv/channel/ajnk ¢ Slim3 サイトの晩云Z晒 http://sites.google.com/site/slim3documentja/ ¢ Kotori Web JUnit Runner(ktrwjr こと`じゃ ) http://code.google.com/p/ktrwjr/ 2 appengine ja night #9
  • 3. クエリの念に 3 appengine ja night #9
  • 4. Datastore 4 appengine ja night #9
  • 5. Bigtable 5 appengine ja night #9
  • 6. Bigtable A distributed, shareded, sorted Array Row name Row data 6 appengine ja night #9
  • 7. Entity 7 appengine ja night #9
  • 8. Entity 8 appengine ja night #9
  • 9. Entities Table 9 appengine ja night #9
  • 10. Entities Table Path 10 appengine ja night #9
  • 11. Entities Table > 箭 ☆ この蹐聾田蹐任后gHのg廾を燕すものではありません。 11 appengine ja night #9
  • 12. ソフトスキ`マ 12 #appengine ja night in kansai 2 ( #ajnk2 )
  • 13. Null 、 Missing 13 #appengine ja night in kansai 2 ( #ajnk2 )
  • 14. Query & Index Tables ¢ Bigtable からのデ`タ函誼 ¢ Datastore からのデ`タ函誼 ¢ Query ¢ Query と Index ¢ Merge Join ¢ 崙s ¢ Query と MVP 14 appengine ja night #9
  • 15. Read 15 appengine ja night #9
  • 16. Prefix Scan 16 appengine ja night #9
  • 17. Range Scan 17 appengine ja night #9
  • 18. Query & Index Tables ¢ Bigtable からのデ`タ函誼 ¢ Datastore からのデ`タ函誼 ¢ Query ¢ Query と Index ¢ Merge Join ¢ 崙s ¢ Query と MVP 18 appengine ja night #9
  • 19. Get 19 appengine ja night #9
  • 20. Get ¢ Key = MyApp/Person(1)/Person(10) 20 appengine ja night #9
  • 21. ┣凌治 Batch Get 21 appengine ja night #9
  • 22. Query 22 appengine ja night #9
  • 23. Query 23 appengine ja night #9
  • 24. Query 24 appengine ja night #9
  • 25. Index ¢ 聞喘する畠ての Query にして Index が駅勣 ¢ い栽わせrの麻?鹿s? Join はできない ¢ プロパティの匯何を卦すことはできない ( キ`だけを卦すことは辛嬬 ) ¢ Entity を厚仟したらvSする Index が厚仟される 25 appengine ja night #9
  • 26. Query & Index Tables ¢ Bigtable からのデ`タ函誼 ¢ Datastore からのデ`タ函誼 ¢ Query ¢ Query と Index ¢ Merge Join ¢ 崙s ¢ Query と MVP 26 appengine ja night #9
  • 27. Query の撹 ¢ Kind を峺協 ¢ 0 參貧のフィルタを峺協 =, <=, <, >, >=, !=, IN ¢ 0 參貧のソ`トを峺協 ASC, DESC ☆Kind を峺協しない Kindless Query という蒙eな Nの Query もあります 27 appengine ja night #9
  • 28. Query と Kind ¢ Query はg匯の Kind の Entity だけを函誼 ★これが Kind の麼な朕議 28 appengine ja night #9
  • 29. 崙s ¢ あるプロパティをフィルタまたはソ`トするには、そ のプロパティが贋壓する駅勣がある ¢ 音吉塀フィルタが聞喘できるのは 1 つのプロパ ティに泙蕕譴 ¢ 音吉塀フィルタで聞喘されているプロパティは麿の ソ`トよりも枠にソ`トする駅勣がある 29 appengine ja night #9
  • 30. 崙s ¢ あるプロパティをフィルタまたはソ`トするには、そ のプロパティが贋壓する駅勣がある ¢ Query の碧Mみを岑ることで 音吉塀フィルタが聞喘できるのは 1 つのプロパ 崙sの尖喇がわかります。 ティに泙蕕譴 ¢ ★ 書晩の朕 音吉塀フィルタで聞喘されているプロパティは麿の ソ`トよりも枠にソ`トする駅勣がある 30 appengine ja night #9
  • 31. Query & Index Tables ¢ Bigtable からのデ`タ函誼 ¢ Datastore からのデ`タ函誼 ¢ Query ¢ Query と Index ¢ Merge Join ¢ 崙s ¢ Query と MVP 31 appengine ja night #9
  • 32. Index Tables ¢ 徭咾牌撹される Index ¢ Kind Index ¢ Single Property Index ¢ 協xが駅勣な Index ¢ Custom Index 32 appengine ja night #9
  • 33. Kind Index 33 appengine ja night #9
  • 34. Kind Index ¢ 蒙協の Kind の畠 Entity を函誼 34 appengine ja night #9
  • 35. Kind Index ¢ 蒙協の Kind の畠 Entity を函誼 ¢ [Kind] Food 35 appengine ja night #9
  • 36. Single Property Index ¢ ASC 36 appengine ja night #9
  • 37. Single Property Index ¢ DESC 37 appengine ja night #9
  • 38. Single Property Index ¢ 1 つのプロパティにする Filter ¢ 1 つのプロパティにする Sort ¢ 1 つのプロパティにする Filter と Sort 38 appengine ja night #9
  • 39. Single Property Index ¢ 1 つのプロパティにする Filter ¢ [Filter] name = "Suzuki" 39 appengine ja night #9
  • 40. Single Property Index ¢ 1 つのプロパティにする Filter ¢ [Filter] name > "B" and name < "T" 40 appengine ja night #9
  • 41. Single Property Index ¢ 1 つのプロパティにする Sort ¢ [Sort] name DESC 41 appengine ja night #9
  • 42. Single Property Index ¢ 1 つのプロパティにする Filter と Sort ¢ [Filter] name > "B" and name < "T" ¢ [Sort] name ASC 42 appengine ja night #9
  • 43. Custom Index 43 appengine ja night #9
  • 44. Custom Index ¢ 2 つ參貧のプロパティにする Sort ¢ 2 つ參貧のプロパティにする Filter ¢ Ancestor と Filter または Sort ¢ Key の週ソ`ト ☆ Merge Join 瘁峰で辛嬬な Query もあります。 44 appengine ja night #9
  • 45. Custom Index ¢ Custom Index の協x 45 appengine ja night #9
  • 46. Custom Index ¢ 2 つ參貧のプロパティにする Sort ¢ [Sort] height ASC, weight DESC 46 appengine ja night #9
  • 47. Custom Index ¢ 2 つ參貧のプロパティにする Filter ¢ [Filter] lastname = "Suzuki" and firstname = "Jiro" 47 appengine ja night #9
  • 48. Custom Index ¢ 2 つ參貧のプロパティにする Filter ¢ [Filter] lastname = "Suzuki" and firstname >= "B" and firstname < "T" 48 appengine ja night #9
  • 49. Custom Index ¢ 2 つ參貧のプロパティにする Filter ¢ [Filter] height >= 170 ¢ [Sort] height ASC, weight DESC 49 appengine ja night #9
  • 50. Custom Index ¢ 音吉塀フィルタ聞喘rの 3 つのル`ル ¢ その1 1 つの音吉塀フィルタと}方の吉塀フィルタがあ る栽は、まず吉塀フィルタのプロパティでソ` トされ、肝に音吉塀フィルタのプロパティでソ`ト されなければならない 50 appengine ja night #9
  • 51. Custom Index ¢ [Filter] height >= 165 and weight = 70 ¢ [Sort] height ASC, weight DESC 51 appengine ja night #9
  • 52. Custom Index ¢ 音吉塀フィルタ聞喘rの 3 つのル`ル ¢ その 2 1 つの音吉塀フィルタと}方のソ`トがある 栽は、まず音吉塀フィルタのプロパティでソ`トさ れ、肝にその麿のプロパティでソ`トされなけれ ばならない 52 appengine ja night #9
  • 53. Custom Index ¢ [Filter] weight > 60 ¢ [Sort] height ASC, weight DESC 53 appengine ja night #9
  • 54. Custom Index ¢ 音吉塀フィルタ聞喘rの 3 つのル`ル ¢ その 3 音吉塀フィルタは1つのプロパティにしかm喘で きない 54 appengine ja night #9
  • 55. Custom Index ¢ [Filter] height >= 170 and weight >= 70 55 appengine ja night #9
  • 56. Custom Index ¢ [Filter] height >= 170 and weight >= 70 56 appengine ja night #9
  • 57. Custom Index ¢ Ancestor と Filter または Sort ¢ Ancestor Query は書晩はh苧しません 57 appengine ja night #9
  • 58. Custom Index ¢ Key の週 Sort には Custom Index が駅勣 58 appengine ja night #9
  • 59. ここまでのまとめ ¢ 徭咾牌撹される Index ¢ Kind Index C 蒙協の Kind の畠 Entity を函誼 ¢ Single Property Index C 1 つのプロパティにする Filter C 1 つのプロパティにする Sort C 1 つのプロパティにする Filter と Sort 59 appengine ja night #9
  • 60. ここまでのまとめ ¢ 協xが駅勣な Index ¢ Custom Index C 2 つ參貧のプロパティにする Sort C 2 つ參貧のプロパティにする Filter C Ancestor と Filter または Sort C キ`の週 Sort 60 appengine ja night #9
  • 61. Query & Index Tables ¢ Bigtable からのデ`タ函誼 ¢ Datastore からのデ`タ函誼 ¢ Query ¢ Query と Index ¢ Merge Join ¢ 崙s ¢ Query と MVP 61 appengine ja night #9
  • 62. Merge Join ¢ }方のプロパティにして吉塀フィルタのみをm喘 する栽は、 Custom Index を聞喘せずに Query をg佩することができる ¢ 訳周 ¢ [Filter] 吉塀フィルタのみ ¢ [Sort] なし 62 appengine ja night #9
  • 63. Merge Join ¢ }方の Single Property Index をマ`ジしながら 沫? "Merge Join" ¢ Key がソ`トされていることを旋喘して "zig-zag" ア ルゴリズムを聞喘 63 appengine ja night #9
  • 64. Merge Join ¢ [Filter] a=1 and b=2 and c=3 64 appengine ja night #9
  • 65. Merge Join ¢ [Filter] a=1 and b=2 and c=3 65 appengine ja night #9
  • 66. Merge Join ¢ [Filter] a=1 and b=2 and c=3 66 appengine ja night #9
  • 67. Merge Join ¢ [Filter] a=1 and b=2 and c=3 67 appengine ja night #9
  • 68. Merge Join ¢ [Filter] a=1 and b=2 and c=3 68 appengine ja night #9
  • 69. Merge Join ¢ [Filter] a=1 and b=2 and c=3 69 appengine ja night #9
  • 70. Merge Join ¢ [Filter] a=1 and b=2 and c=3 70 appengine ja night #9
  • 71. Merge Join ¢ [Filter] a=1 and b=2 and c=3 71 appengine ja night #9
  • 72. Merge Join ¢ [Filter] a=1 and b=2 and c=3 72 appengine ja night #9
  • 73. Merge Join ¢ [Filter] a=1 and b=2 and c=3 73 appengine ja night #9
  • 74. Merge Join ¢ デ`タ楚がえてくると Merge Join ではI尖しき れなくなる ?仝 Custom Index が駅勣々というエラ`になる ¢ Custom Index が協xされている栽は Merge Join せずに Custom Index が聞喘される 74 appengine ja night #9
  • 75. Query & Index Tables ¢ Bigtable からのデ`タ函誼 ¢ Datastore からのデ`タ函誼 ¢ Query ¢ Query と Index ¢ Merge Join ¢ 崙s ¢ Query と MVP 75 appengine ja night #9
  • 76. 崙s ¢ あるプロパティをフィルタまたはソ`トするには、そ のプロパティが贋壓する駅勣がある ¢ 音吉塀フィルタが聞喘できるのは 1 つのプロパ ティに泙蕕譴 ¢ 音吉塀フィルタで聞喘されているプロパティは麿の ソ`トよりも枠にソ`トする駅勣がある 76 appengine ja night #9
  • 77. Query & Index Tables ¢ Bigtable からのデ`タ函誼 ¢ Datastore からのデ`タ函誼 ¢ Query ¢ Query と Index ¢ Merge Join ¢ 崙s ¢ Query と MVP 77 appengine ja night #9
  • 78. MVP と吉塀フィルタ ¢ Entity1(Key1) ¢ favorite=["apple", "google"] ¢ Entity2(Key2) ¢ favorite=["google"] ¢ Entity3(Key3) ¢ favorite=["orange"] 78 appengine ja night #9
  • 79. MVP と吉塀フィルタ 79 appengine ja night #9
  • 80. MVP と吉塀フィルタ ¢ [Filter] favorite="google" 80 appengine ja night #9
  • 81. MVP と吉塀フィルタ ¢ リスト坪のいずれかの、吉塀フィルタに匯崑す れば函誼される 81 appengine ja night #9
  • 82. MVP と吉塀フィルタ ¢ [Filter] favorite="google" and favorite="apple" ¢ Merge Join によって Entity1 が函誼される 82 appengine ja night #9
  • 83. MVP と音吉塀フィルタ ¢ Entity1(Key1) ¢ val=[1, 3, 5] ¢ Entity2(Key2) ¢ val=[2, 3, 4] 83 appengine ja night #9
  • 84. MVP と音吉塀フィルタ ¢ Entity1(Key1) ¢ val=[1, 3, 5] ¢ Entity2(Key2) ¢ val=[2, 3, 4] 84 appengine ja night #9
  • 85. MVP と音吉塀フィルタ ¢ [Filter] val >= 3 ¢ 恷兜にマッチしたものが駻辰気譴 85 appengine ja night #9
  • 86. MVP とソ`ト ¢ Entity1(Key1) ¢ val=[1, 3, 5] ¢ Entity2(Key2) ¢ val=[2, 3, 4] 86 appengine ja night #9
  • 87. MVP とソ`ト 87 appengine ja night #9
  • 88. MVP とソ`ト ¢ ASC でも DESC でも Entity1,Entity2 のになる 88 appengine ja night #9
  • 89. インデックス卯k ¢ MVP にするフィルタを}方隔つ Custom Index を 恬撹した栽 ¢ Entity1 ¢ val1: 勣殆方 10 ¢ val2: 勣殆方 10 ¢ Custom Index ¢ [Sort] val1 ASC, val2 ASC ?Entity1 の Index は 100 佩になる 89 appengine ja night #9
  • 90. インデックス卯k ¢ 1Entity にするインデックス方は 5000 まで ¢ Entity2 ¢ val1: 勣殆方 18 ¢ val2: 勣殆方 18 ¢ val3: 勣殆方 18 ¢ Query ¢ [Filter] val1=x and val2=y and val3=z ? インデックス卯k 90 appengine ja night #9
  • 91. インデックス卯k ¢ Ancestor Query の Custom Index ¢ Ancestor は婢_される ¢ 侮い EG を侘撹している栽に MVP とのMみ栽 わせでインデックス卯kになりやすい 91 appengine ja night #9
  • 92. Next gen queries ¢ Merge Join と Multi Query(Custom Index を聞喘す るもの ) のg廾がパワ`アップするらしい http://code.google.com/events/io/2010/sessions /next-gen-queries-appengine.html 92 appengine ja night #9
  • 93. 歌深 ¢ Programming Google App Engine http://www.amazon.co.jp/o/ASIN/059652272X ¢ 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 ¢ @kazunori_279 さんの仝 GAE/J ってどう聞う拭 http://d.hatena.ne.jp/kazunori_279/20090617/1245224939 ¢ @ashigeru さんの仝レンジスキャンのアレ々 http://gist.github.com/294650 ¢ Cacoo ( カク` ) http://cacoo.com/ 93 appengine ja night #9
  • 94. ありがとうございました 94 appengine ja night #9