際際滷

際際滷Share a Scribd company logo
Google App Engine
      Tom叩邸 Holas
Co je to App Engine?
 Prosted鱈 pro v箪voj a hostov叩n鱈 webov箪ch
  aplikac鱈 na Google infrastruktue
 PaaS = Platform as a Service
 Automatick辿 邸k叩lov叩n鱈
 Nutnost dodr転ov叩n鱈 pravidel platformy
 Aplikace v Sandboxu
 V箪voj v simulovan辿m prosted鱈 SDK
 Python, Java, dal邸鱈 JVM jazyky, podpora
  vt邸iny webov箪ch framework哲
Jak叩 jsou pravidla?
 Filesyst辿m pouze pro ten鱈
 30s as na odpov serveru
 Z叩kaz otev鱈rat s鱈泥ov叩 spojen鱈
 貼叩dn辿 nov辿 procesy ani thready
 Z叩kaz jak箪chkoliv syst辿mov箪ch vol叩n鱈
 Omezen鱈 potu a velikosti soubor哲
 Kv坦ty na vyu転鱈v叩n鱈 syst辿mov箪ch
  prostedk哲
V邸echno pes API
 URL Fetch
 Mail
 Images
 Google Accounts
 CRON
 Task Queues
 XMPP (Jabber)
Google Datastore
 Distribuovan叩 datab叩ze
 Zalo転eno na BigTable
 Podporuje Transakce a Partitioning
 Podporuje Hierarchie
 Nen鱈 relan鱈 datab叩ze
 Bez sch辿matu
 Nepodporuje SQL
Princip Datastore

 Z叩kladn鱈 jednotkou je Entita  z叩znam
  Druh (Kind)  tabulka
  Kl鱈 (Key)  prim叩rn鱈 kl鱈
  Skupina Entit (Entity Group)  partition
  0..N Vlastnost鱈 (Properties)  sloupce
 V邸echny entity v jedn辿 Tabulce
Vlastnosti Entit
 Ka転d叩 Entita m哲転e m鱈t libovolnou kombinaci
  vlastnost鱈 nez叩visle na sv辿m druhu

 Vlastnosti m哲転ou b箪t v鱈cehodnotov辿, nap pole
     t辿to vlastnosti lze vyu転鱈t pro 1:N a M:N relace

 Ka転d叩 entita m哲転e m鱈t sv辿ho Rodie a vytv叩et
  tak hierarchie
     Podle Hierarchi鱈 se prov叩d鱈 automatick箪 Partitioning

     Transakce jsou mo転n辿 pouze pro Entity se stejn辿 Skupin Entit
Omezen鱈 Datastore
   Nepou転鱈v叩 SQL, pouze GQL (Python) nebo JDOQL (Java)

   Neexistuje podpora pro Joiny, ani tam nen鱈 nic podobn辿ho

   貼叩dn辿 datab叩zov辿 constraints (omezen鱈 na ciz鱈 kl鱈e)

   貼叩dn辿 agregan鱈 funkce (count, avg, min, max)

   Maxim叩ln 1000 z叩znam哲 z jednoho dotazu. Za 1000. z叩znam v poad鱈
    nen鱈 mo転n辿 se dostat ani pes offset.

   Omezen鱈 na podm鱈nky dotazu: Nerovnost pouze na 1 vlastnosti
    SELECT * FROM Person WHERE
    birth_year >= 1980 AND birth_year <= 2009
    SELECT * FROM Person WHERE
    birth_year >= 1980 AND height >= 180

   貼叩dn辿 glob叩ln鱈 transakce - pouze v r叩mci stejn辿 Skupiny Entit

   Nelze prov叩dt ad-hoc dotazy, proto転e ka転d箪 typ dotazu potebuje
    vlastn鱈 index (pom叩h叩 SDK)
Jak se s t鱈m vyrovnat?
 Zv叩転it vhodnost platformy
     Jde v tom moje aplikace v哲bec napsat?

 Pokud ano, tak zmnit zp哲sob my邸len鱈
 Zmnit zp哲sob n叩vrhu aplikace
     Nenechat se ovlivovat stereotypy z relan鱈ch datab叩z鱈

 Sna転it se vyu転鱈t v箪hod Datastore
     Jednoduchost, rychlost, pru転nost, v鱈cehodnotov辿 vlastnosti...

 Denormalizovat!
 Pen辿st odpovdnost za konzistenci dat z
   datab叩ze na aplikaci
Python API
class Person(db.Model):
  first_name = db.StringProperty()
  last_name = db.StringProperty()
  hobbies = db.StringListProperty()

p = Person(first_name = "Albert", last_name = "Johnson")
p.hobbies = ["chess", "travel"]

query = db.Query(Person)
query.filter("last_name = ", "Johnson")
results = query.fetch
Java API
@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Person {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

      @Persistent
      private String firstName;

      @Persistent
      private String lastName;

      @Persistent
      List<String> hobbies;
  }

Query query = pm.newQuery(Person.class);
query.setFilter("lastName == 'Johnson'");
List<Employee> results = (List<Employee>) query.execute();
DEMO !
Z叩vr

 App Engine umo転uje snadn箪 v箪voj
  邸k叩lovateln箪ch webov箪ch aplikac鱈
 Pozor na specifick叩 omezen鱈
 Vhodn辿 pro hodn velk辿, nebo hodn
  mal辿 projekty
 Platforma se rychle vyv鱈j鱈 a vylep邸uje
Dkuji za pozornost!
      tomas.holas@gmail.com
      linkedin.com/in/tomash
    facebook.com/tomas.holas
        twitter.com/tomaash

More Related Content

Google App Engine

  • 1. Google App Engine Tom叩邸 Holas
  • 2. Co je to App Engine? Prosted鱈 pro v箪voj a hostov叩n鱈 webov箪ch aplikac鱈 na Google infrastruktue PaaS = Platform as a Service Automatick辿 邸k叩lov叩n鱈 Nutnost dodr転ov叩n鱈 pravidel platformy Aplikace v Sandboxu V箪voj v simulovan辿m prosted鱈 SDK Python, Java, dal邸鱈 JVM jazyky, podpora vt邸iny webov箪ch framework哲
  • 3. Jak叩 jsou pravidla? Filesyst辿m pouze pro ten鱈 30s as na odpov serveru Z叩kaz otev鱈rat s鱈泥ov叩 spojen鱈 貼叩dn辿 nov辿 procesy ani thready Z叩kaz jak箪chkoliv syst辿mov箪ch vol叩n鱈 Omezen鱈 potu a velikosti soubor哲 Kv坦ty na vyu転鱈v叩n鱈 syst辿mov箪ch prostedk哲
  • 4. V邸echno pes API URL Fetch Mail Images Google Accounts CRON Task Queues XMPP (Jabber)
  • 5. Google Datastore Distribuovan叩 datab叩ze Zalo転eno na BigTable Podporuje Transakce a Partitioning Podporuje Hierarchie Nen鱈 relan鱈 datab叩ze Bez sch辿matu Nepodporuje SQL
  • 6. Princip Datastore Z叩kladn鱈 jednotkou je Entita z叩znam Druh (Kind) tabulka Kl鱈 (Key) prim叩rn鱈 kl鱈 Skupina Entit (Entity Group) partition 0..N Vlastnost鱈 (Properties) sloupce V邸echny entity v jedn辿 Tabulce
  • 7. Vlastnosti Entit Ka転d叩 Entita m哲転e m鱈t libovolnou kombinaci vlastnost鱈 nez叩visle na sv辿m druhu Vlastnosti m哲転ou b箪t v鱈cehodnotov辿, nap pole t辿to vlastnosti lze vyu転鱈t pro 1:N a M:N relace Ka転d叩 entita m哲転e m鱈t sv辿ho Rodie a vytv叩et tak hierarchie Podle Hierarchi鱈 se prov叩d鱈 automatick箪 Partitioning Transakce jsou mo転n辿 pouze pro Entity se stejn辿 Skupin Entit
  • 8. Omezen鱈 Datastore Nepou転鱈v叩 SQL, pouze GQL (Python) nebo JDOQL (Java) Neexistuje podpora pro Joiny, ani tam nen鱈 nic podobn辿ho 貼叩dn辿 datab叩zov辿 constraints (omezen鱈 na ciz鱈 kl鱈e) 貼叩dn辿 agregan鱈 funkce (count, avg, min, max) Maxim叩ln 1000 z叩znam哲 z jednoho dotazu. Za 1000. z叩znam v poad鱈 nen鱈 mo転n辿 se dostat ani pes offset. Omezen鱈 na podm鱈nky dotazu: Nerovnost pouze na 1 vlastnosti SELECT * FROM Person WHERE birth_year >= 1980 AND birth_year <= 2009 SELECT * FROM Person WHERE birth_year >= 1980 AND height >= 180 貼叩dn辿 glob叩ln鱈 transakce - pouze v r叩mci stejn辿 Skupiny Entit Nelze prov叩dt ad-hoc dotazy, proto転e ka転d箪 typ dotazu potebuje vlastn鱈 index (pom叩h叩 SDK)
  • 9. Jak se s t鱈m vyrovnat? Zv叩転it vhodnost platformy Jde v tom moje aplikace v哲bec napsat? Pokud ano, tak zmnit zp哲sob my邸len鱈 Zmnit zp哲sob n叩vrhu aplikace Nenechat se ovlivovat stereotypy z relan鱈ch datab叩z鱈 Sna転it se vyu転鱈t v箪hod Datastore Jednoduchost, rychlost, pru転nost, v鱈cehodnotov辿 vlastnosti... Denormalizovat! Pen辿st odpovdnost za konzistenci dat z datab叩ze na aplikaci
  • 10. Python API class Person(db.Model): first_name = db.StringProperty() last_name = db.StringProperty() hobbies = db.StringListProperty() p = Person(first_name = "Albert", last_name = "Johnson") p.hobbies = ["chess", "travel"] query = db.Query(Person) query.filter("last_name = ", "Johnson") results = query.fetch
  • 11. Java API @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Person { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id; @Persistent private String firstName; @Persistent private String lastName; @Persistent List<String> hobbies; } Query query = pm.newQuery(Person.class); query.setFilter("lastName == 'Johnson'"); List<Employee> results = (List<Employee>) query.execute();
  • 13. Z叩vr App Engine umo転uje snadn箪 v箪voj 邸k叩lovateln箪ch webov箪ch aplikac鱈 Pozor na specifick叩 omezen鱈 Vhodn辿 pro hodn velk辿, nebo hodn mal辿 projekty Platforma se rychle vyv鱈j鱈 a vylep邸uje
  • 14. Dkuji za pozornost! tomas.holas@gmail.com linkedin.com/in/tomash facebook.com/tomas.holas twitter.com/tomaash