{"id":2392,"date":"2013-09-28T12:53:49","date_gmt":"2013-09-28T10:53:49","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=2392"},"modified":"2013-09-28T12:53:49","modified_gmt":"2013-09-28T10:53:49","slug":"daten-speichern-in-google-app-engines-datastore","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2013\/09\/daten-speichern-in-google-app-engines-datastore\/","title":{"rendered":"Daten speichern in Google App Engines Datastore"},"content":{"rendered":"<p>Die Google App Engine (GAE) ist eine freie Hosting-Plattform auf der Java Web-Applikationen deployt werden k\u00f6nnen. Google bietet f\u00fcr die GAP eine Reihe von Diensten an, etwa zur Datenspeicherung, Mail-Versand\/-Empfang, Messaging und mehr. Wer sich f\u00fcr die GAE entscheidet und Daten speichern m\u00f6chte, dem steht quasi unendliche Speicherkapazit\u00e4t zur Verf\u00fcgung. Google speichert die Daten in einer Cloud, der Google BigTable (<a href=\"http:\/\/en.wikipedia.org\/wiki\/BigTable\">http:\/\/en.wikipedia.org\/wiki\/BigTable<\/a>). Sie ist im Wesentlichen ein riesiger verteilter Assoziativspeicher.<\/p>\n<p>Der Datestore \u2013 so wird die Datenspeicher f\u00fcr die Google App Engine genannt \u2013 speichert <b>Entities<\/b>. Eine Entity hat einen Typ (<b>Entity-Kind<\/b> genannt) und eine Menge von Schl\u00fcssel\/Werte-Paaren. Eine konkrete Entity f\u00fcr eine Person k\u00f6nnte etwa die Schl\u00fcssel-Wert-Menge { name = \u201eChris\u201c, age = 36 } speichern. Die Entities sind nicht mit klassischen Tabellenzeilen von relationalen Datenbanken zu vergleichen, das sie schemalos sind: Es gibt also keine Spalten mit festen Datentypen. Es k\u00f6nnen also beliebig viele \u201eSpalten\u201c f\u00fcr gewisse Entities hinzukommen. Eine Person in der Datastore kann wie im ersten Beispiel Name und Alter speichern, eine andere Person Name und Schuhgr\u00f6\u00dfe. Die Anzahl Schl\u00fcssel ist wirklich beliebig; eine Tatsache die vom relationalen Design totales Umdenken erfordert.<\/p>\n<p>Zum Zugriff auf den Datastore steht auf unterster Schicht eine Low-Level API (<a href=\"https:\/\/developers.google.com\/appengine\/docs\/java\/javadoc\/com\/google\/appengine\/api\/datastore\/package-summary\">https:\/\/developers.google.com\/appengine\/docs\/java\/javadoc\/com\/google\/appengine\/api\/datastore\/package-summary<\/a>). Diese API bietet grundlegende CRUD-Operationen und ist mit 10 Interfaces und etwas mehr als 50 Klassen leicht verst\u00e4ndlich und \u00fcbersichtlich. Wenn eine Person gespeichert werden soll, sieht das so aus:<\/p>\n<pre lang=\"java\">Entity chris = new Entity( &quot;Person&quot; );\nchris.setProperty(&quot;name&quot;, &quot;chris&quot;);\nchris.setProperty(&quot;age&quot;, 20 );\nDatastoreService datastore = DatastoreServiceFactory.getDatastoreService();\ndatastore.put(chris);<\/pre>\n<p>Jede Entity ist durch einen Schl\u00fcssel gekennzeichnet. Nach dem Speichern einer Entity l\u00e4sst sich dieser Schl\u00fcssel \u00fcber getKey() erfragen. Ist der Schl\u00fcssel bekannt, kann eine Anfrage an den Datastore gemacht werden.<\/p>\n<pre lang=\"java\">Key key = chris.getKey();\nDatastoreService datastore = DatastoreServiceFactory.getDatastoreService();\nEntity e = datastore.get( key );\nLong age = (Long) alice.getProperty(&quot;age&quot;);<\/pre>\n<p>Die Anfragen werden \u00fcber den Entity-Typ gestellt, der in Key steckt. Alle Entities haben einen Entity-Kind und die Suche auf dem Datastore ist immer mit diesem Entity-Kind verbunden. <\/p>\n<p>Der Datastore bietet eine hohe Lese- und Anfrage-Geschwindigkeit ist aber nicht unbedingt komfortablen.<\/p>\n<p><a href=\"https:\/\/developers.google.com\/appengine\/docs\/java\/datastore\/?hl=de\">https:\/\/developers.google.com\/appengine\/docs\/java\/datastore\/?hl=de<\/a> gibt auch auf Deutsch ein paar Hinweise. Aufbauend auf dieser Low-Level API implementiert Google die Standards Java Persistence API (JPA) und Java Data Objects (JDO). Im Open-Source-Bereich gibt es noch <a href=\"https:\/\/code.google.com\/p\/objectify-appengine\/\">https:\/\/code.google.com\/p\/objectify-appengine\/<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Google App Engine (GAE) ist eine freie Hosting-Plattform auf der Java Web-Applikationen deployt werden k\u00f6nnen. Google bietet f\u00fcr die GAP eine Reihe von Diensten an, etwa zur Datenspeicherung, Mail-Versand\/-Empfang, Messaging und mehr. Wer sich f\u00fcr die GAE entscheidet und Daten speichern m\u00f6chte, dem steht quasi unendliche Speicherkapazit\u00e4t zur Verf\u00fcgung. Google speichert die Daten in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[20],"tags":[],"class_list":["post-2392","post","type-post","status-publish","format-standard","hentry","category-gaej"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2392","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=2392"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2392\/revisions"}],"predecessor-version":[{"id":2393,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/2392\/revisions\/2393"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=2392"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=2392"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=2392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}