[MANUAL] German:
[zend.git] / documentation / manual / de / module_specs / Zend_Service_WindowsAzure_Table.xml
blobc82869e5d6bb5beb9725c60d1aacc3ea7aaab60e
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 21740 -->
3 <!-- Reviewed: no -->
4 <sect2 id="zend.service.windowsazure.storage.table">
5     <title>Zend_Service_WindowsAzure_Storage_Table</title>
7     <para>
8         Der Table Service bietet einen strukturierten Speicher in der Form von Tabellen.
9     </para>
11     <para>
12         Tabellen Speicher wird von Windows Azure als REST API angeboten die von der Klasse
13         <classname>Zend_Service_WindowsAzure_Storage_Table</classname> umhüllt ist um ein natives
14         <acronym>PHP</acronym> Interface zum Speicher Konto zu bieten.
15     </para>
17     <para>
18         Dieses Thema zeigt einige Beispiele der Verwendung der Klasse
19         <classname>Zend_Service_WindowsAzure_Storage_Table</classname>. Andere Features sind im
20         Download Paket enthalten sowie in den detailierten API Dokumentationen dieser Features.
21     </para>
23     <para>
24         Es ist zu beachten das bei der Entwicklung der Tabellen Speicher (in der SDK von Windows
25         Azure) nicht alle Features unterstützt welche von dieser API angeboten werden. Deshalb sind
26         die Beispiele welche auf dieser Seite aufgeführt sind, dazu gedacht auf Windows Azure
27         Produktions Tabellen Speichern verwendet zu werden.
28     </para>
30     <sect3 id="zend.service.windowsazure.storage.table.api">
31         <title>Operationen auf Tabellen</title>
33         <para>
34             Dieses Thema zeigt einige Beispiele für Operationen welche auf Tabellen ausgeführt
35             werden können.
36         </para>
38         <sect4 id="zend.service.windowsazure.storage.table.api.create">
39             <title>Erstellung einer Tabelle</title>
41             <para>
42                 Bei Verwendung des folgenden Codes, kann eine Tabelle auf dem Windows Azure
43                 Produktions Tabellen Speicher erstellt werden.
44             </para>
46             <example id="zend.service.windowsazure.storage.table.api.create.example">
47                 <title>Erstellen einer Tabelle</title>
49                 <programlisting language="php"><![CDATA[
50 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
51     'table.core.windows.net', 'myaccount', 'myauthkey'
53 $result = $storageClient->createTable('testtable');
55 echo 'Der neue Name der Tabelle ist: ' . $result->Name;
56 ]]></programlisting>
57             </example>
58         </sect4>
60         <sect4 id="zend.service.windowsazure.storage.table.api.list">
61             <title>Ausgeben aller Tabellen</title>
63             <para>
64                 Bei Verwendung des folgendes Codes, kann eine Liste alle Tabellen im Windows Azure
65                 Produktions Tabellen Speicher abgefragt werden.
66             </para>
68             <example id="zend.service.windowsazure.storage.table.api.list.example">
69                 <title>Ausgeben aller Tabellen</title>
71                 <programlisting language="php"><![CDATA[
72 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
73     'table.core.windows.net', 'myaccount', 'myauthkey'
75 $result = $storageClient->listTables();
76 foreach ($result as $table) {
77     echo 'Der Name der Tabelle ist: ' . $table->Name . "\r\n";
79 ]]></programlisting>
80             </example>
81         </sect4>
82     </sect3>
84     <sect3 id="zend.service.windowsazure.storage.table.entities">
85         <title>Operationen auf Entitäten</title>
87         <para>
88             Tabellen speichern Daten als Sammlung von Entitäten. Entitäten sind so ähnlich wie
89             Zeilen. Eine Entität hat einen primären Schlüssel und ein Set von Eigenschaften. Eine
90             Eigenschaft ist ein benanntes, Typ-Werte Paar, ähnlich einer Spalte.
91         </para>
93         <para>
94             Der Tabellen Service erzwingt kein Schema für Tabellen, deshalb können zwei Entitäten in
95             der selben Tabelle unterschiedliche Sets von Eigenschaften haben. Entwickler können
96             auswählen das ein Schema auf Seite des Clients erzwungen wird. Eine Tabelle kann eine
97             beliebige Anzahl an Entitäten enthalten.
98         </para>
100         <para>
101             <classname>Zend_Service_WindowsAzure_Storage_Table</classname> bietet 2 Wege um mit
102             Entitäten zu arbeiten:
103         </para>
105         <itemizedlist>
106             <listitem><para>Erzwungenes Schema</para></listitem>
107             <listitem><para>Nicht erzwungenes Schema</para></listitem>
108         </itemizedlist>
110         <para>
111             Alle Beispiel verwenden die folgende erwzungene Schema Klasse.
112         </para>
114         <example id="zend.service.windowsazure.storage.table.entities.schema">
115             <title>Erzwungenes Schema welches in Beispielen verwendet wird</title>
117             <programlisting language="php"><![CDATA[
118 class SampleEntity extends Zend_Service_WindowsAzure_Storage_TableEntity
120     /**
121     * @azure Name
122     */
123     public $Name;
125     /**
126     * @azure Age Edm.Int64
127     */
128     public $Age;
130     /**
131     * @azure Visible Edm.Boolean
132     */
133     public $Visible = false;
135 ]]></programlisting>
136         </example>
138         <para>
139             Es ist zu beachten das <classname>Zend_Service_WindowsAzure_Storage_Table</classname>,
140             wenn keine Schema Klasse an die Tabellen Speicher Methoden übergeben, automatisch mit
141             <classname>Zend_Service_WindowsAzure_Storage_DynamicTableEntity</classname> arbeitet.
142         </para>
144         <sect4 id="zend.service.windowsazure.storage.table.entities.enforced">
145             <title>Erzwungene Schema Entitäten</title>
147             <para>
148                 Um ein Schema auf der Seite des Clients bei Verwendung der Klasse
149                 <classname>Zend_Service_WindowsAzure_Storage_Table</classname> zu erzwingen muss
150                 eine Klasse erstellt werden welche sich von
151                 <classname>Zend_Service_WindowsAzure_Storage_TableEntity</classname> ableitet. Diese
152                 Klasse bietet einige grundsätzliche Funktionalitäten damit die Klasse
153                 <classname>Zend_Service_WindowsAzure_Storage_Table</classname> mit einem
154                 client-seitigen Schema arbeitet.
155             </para>
157             <para>
158                 Grundsätzliche Eigenschaften welche von
159                 <classname>Zend_Service_WindowsAzure_Storage_TableEntity</classname> angeboten
160                 werden sind:
161             </para>
163             <itemizedlist>
164                 <listitem>
165                     <para>
166                         PartitionKey (durch <methodname>getPartitionKey()</methodname> und
167                         <methodname>setPartitionKey()</methodname> bekanntgemacht)
168                     </para>
169                 </listitem>
171                 <listitem>
172                     <para>
173                         RowKey (durch <methodname>getRowKey()</methodname> und
174                         <methodname>setRowKey()</methodname> bekanntgemacht)
175                     </para>
176                 </listitem>
178                 <listitem>
179                     <para>
180                         Timestamp (durch <methodname>getTimestamp()</methodname> und
181                         <methodname>setTimestamp()</methodname> bekantgemacht)
182                     </para>
183                 </listitem>
185                 <listitem>
186                     <para>
187                         Etag Wert (durch <methodname>getEtag()</methodname> und
188                         <methodname>setEtag()</methodname> bekanntgemacht)
189                     </para>
190                 </listitem>
191             </itemizedlist>
193             <para>
194                 Hier ist eine Beispielklasse welche sich von
195                 <classname>Zend_Service_WindowsAzure_Storage_TableEntity</classname> ableitet:
196             </para>
198             <example id="zend.service.windowsazure.storage.table.entities.enforced.schema">
199                 <title>Beispiel einer erzwungenen Schema Klasse</title>
201                 <programlisting language="php"><![CDATA[
202 class SampleEntity extends Zend_Service_WindowsAzure_Storage_TableEntity
204     /**
205      * @azure Name
206      */
207     public $Name;
209     /**
210      * @azure Age Edm.Int64
211      */
212     public $Age;
214     /**
215      * @azure Visible Edm.Boolean
216      */
217     public $Visible = false;
219 ]]></programlisting>
220             </example>
222             <para>
223                 Die Klasse <classname>Zend_Service_WindowsAzure_Storage_Table</classname> mappt jede
224                 Klasse welche sich von
225                 <classname>Zend_Service_WindowsAzure_Storage_TableEntity</classname> ableitet auf
226                 Windows Azure Tabellen Speicher Entitäten mit dem richtigen Datentyp und dem Namen
227                 der Eigenschaft. Alles dort dient dem Speichern einer Eigenschaft in Windows Azure
228                 indem ein Docblock Kommentar zu einer öffentlichen Eigenschaft oder einem
229                 öffentlichen Getter oder Setter, im folgenden Format hinzugefügt wird:
230             </para>
232             <example id="zend.service.windowsazure.storage.table.entities.enforced.schema-property">
233                 <title>Erzwungene Eigenschaft</title>
235                 <programlisting language="php"><![CDATA[
237  * @azure <Name der Eigenschaft in Windows Azure> <optionaler Typ der Eigenschaft>
238  */
239 public $<Name der Eigenschaft in PHP>;
240 ]]></programlisting>
241             </example>
243             <para>
244                 Sehen wir uns an wie eine Eigenschaft "Ago" als Integerwert eines Windows Azure
245                 Tabellen Speichers definiert wird:
246             </para>
248             <example
249                 id="zend.service.windowsazure.storage.table.entities.enforced.schema-property-sample">
250                 <title>Beispiel einer erzwungenen Eigenschaft</title>
252                 <programlisting language="php"><![CDATA[
254  * @azure Age Edm.Int64
255  */
256 public $Age;
257 ]]></programlisting>
258             </example>
260             <para>
261                 Es ist zu beachten das die Eigenschaft im Windows Azure Tabellen Speicher nicht
262                 notwendigerweise gleich benannt werden muss. Der Name der Windows Azure Tabellen
263                 Speicher Eigenschaft kann genauso definiert werden wie der Typ.
264             </para>
266             <para>
267                 Die folgenden Datentypen werden unterstützt:
268             </para>
270             <itemizedlist>
271                 <listitem>
272                     <para>
273                         <constant>Edm.Binary</constant> - Ein Array von Types welche bis zu 64 KB
274                         Größe.
275                     </para>
276                 </listitem>
278                 <listitem>
279                     <para>
280                         <constant>Edm.Boolean</constant> - Ein boolscher Wert.
281                     </para>
282                 </listitem>
284                 <listitem>
285                     <para>
286                         <constant>Edm.DateTime</constant> - Ein 64-bit Wert welcher als koordinierte
287                         universelle Zeit (UTC) ausgedrückt wird. Der unterstützte DateTime Bereich
288                         beginnt an 1. Jänner 1601 A.D. (C.E.), koordinierter Universeller Zeit
289                         (UTC). Der Bereich endet am 31. Dezember 9999.
290                     </para>
291                 </listitem>
293                 <listitem>
294                     <para><constant>Edm.Double</constant> - Eine 64-bit Gleitkommazahl.</para>
295                 </listitem>
297                 <listitem>
298                     <para>
299                         <constant>Edm.Guid</constant> - Ein 128-bit großer globaler eindeutiger
300                         Identifikator.
301                     </para>
302                 </listitem>
304                 <listitem>
305                     <para><constant>Edm.Int32</constant> - Ein 32-bit Integerwert.</para>
306                 </listitem>
308                 <listitem>
309                     <para><constant>Edm.Int64</constant> - Ein 64-bit Integerwert.</para>
310                 </listitem>
312                 <listitem>
313                     <para>
314                         <constant>Edm.String</constant> - Ein UTF-16-kodierter Wert. Stringwerte
315                         können bis zu 64 KB groß sein.
316                     </para>
317                 </listitem>
318             </itemizedlist>
319         </sect4>
321         <sect4 id="zend.service.windowsazure.storage.table.entities.dynamic">
322             <title>Entitäten ohne erzwungenes Schema (a.k.a. DynamicEntity)</title>
324             <para>
325                 Um die Klasse <classname>Zend_Service_WindowsAzure_Storage_Table</classname> ohne
326                 Definition eines Schemas zu verwenden kann die Klasse
327                 <classname>Zend_Service_WindowsAzure_Storage_DynamicTableEntity</classname>
328                 verwendet werden. Diese Klasse erweitert
329                 <classname>Zend_Service_WindowsAzure_Storage_TableEntity</classname> wie es eine
330                 Klasse für ein erzwungenes Schema machen würde, enthält aber zusätzliche Logik um
331                 Sie dynamisch zu machen und nicht an ein Schema zu binden.
332             </para>
334             <para>
335                 Die grundsätzlichen Eigenschaften welche von
336                 <classname>Zend_Service_WindowsAzure_Storage_DynamicTableEntity</classname>
337                 angeboten werden sind:
338             </para>
340             <itemizedlist>
341                 <listitem>
342                     <para>
343                         PartitionKey (durch <methodname>getPartitionKey()</methodname> und
344                         <methodname>setPartitionKey()</methodname> bekanntgemacht)
345                     </para>
346                 </listitem>
348                 <listitem>
349                     <para>
350                         RowKey (durch <methodname>getRowKey()</methodname> und
351                         <methodname>setRowKey()</methodname> bekanntgemacht)
352                     </para>
353                 </listitem>
355                 <listitem>
356                     <para>
357                         Timestamp (durch <methodname>getTimestamp()</methodname> und
358                         <methodname>setTimestamp()</methodname> bekanntgemacht)
359                     </para>
360                 </listitem>
362                 <listitem>
363                     <para>
364                         Etag Wert (durch <methodname>getEtag()</methodname> und
365                         <methodname>setEtag()</methodname> bekanntgemacht)
366                     </para>
367                 </listitem>
368             </itemizedlist>
370             <para>
371                 Andere Eigenschaften können on the Fly hinzugefügt werden. Ihre Windows Azure
372                 Tabellen Speicher Typen werden auch on the Fly ermittelt:
373             </para>
375             <example id="zend.service.windowsazure.storage.table.entities.dynamic.schema">
376                 <title>
377                     Eigenschaften zu Zend_Service_WindowsAzure_Storage_DynamicTableEntity dynamisch
378                     hinzufügen
379                 </title>
381                 <programlisting language="php"><![CDATA[
382 $target = new Zend_Service_WindowsAzure_Storage_DynamicTableEntity(
383     'partition1', '000001'
385 $target->Name = 'Name'; // Fügt die Eigenschaft "Name" vom Typ "Edm.String" hinzu
386 $target->Age  = 25;     // Fügt die Eigenschaft "Age" vom Typ "Edm.Int32" hinzu
387 ]]></programlisting>
388             </example>
390             <para>
391                 Optional kann der Typ einer Eigenschaft erzwungen werden:
392             </para>
394             <example
395                 id="zend.service.windowsazure.storage.table.entities.dynamic.schema-forcedproperties">
396                 <title>
397                     Erzwingen von Eigenschaftstypen auf
398                     Zend_Service_WindowsAzure_Storage_DynamicTableEntity
399                 </title>
401                 <programlisting language="php"><![CDATA[
402 $target = new Zend_Service_WindowsAzure_Storage_DynamicTableEntity(
403     'partition1', '000001'
405 $target->Name = 'Name'; // Fügt die Eigenschaft "Name" vom Typ "Edm.String" hinzu
406 $target->Age  = 25;     // Fügt die Eigenschaft "Age" vom Typ "Edm.Int32" hinzu
408 // Ändert den Typ der Eigenschaft "Age" auf "Edm.Int32":
409 $target->setAzurePropertyType('Age', 'Edm.Int64');
410 ]]></programlisting>
411             </example>
413             <para>
414                 Die Klasse <classname>Zend_Service_WindowsAzure_Storage_Table</classname> arbeitet
415                 automatisch mit <classname>Zend_Service_WindowsAzure_Storage_TableEntity</classname>
416                 wenn an die Tabellen Speicher Methoden keine spezielle Klasse übergeben wurde.
417             </para>
418         </sect4>
420         <sect4 id="zend.service.windowsazure.storage.table.entities.api">
421             <title>API Beispiele für Entitäten</title>
423             <sect5 id="zend.service.windowsazure.storage.table.entities.api.insert">
424                 <title>Eine Entität hinzufügen</title>
426                 <para>
427                     Bei Verwendung des folgenden Codes kann eine Entität in eine Tabelle hinzugefügt
428                     werden welche "testtable" heißt. Es ist zu beachten das die Tabelle vorher schon
429                     erstellt worden sein muss.
430                 </para>
432                 <example id="zend.service.windowsazure.storage.table.api.entities.insert.example">
433                     <title>Eine Entität einfügen</title>
435                     <programlisting language="php"><![CDATA[
436 $entity = new SampleEntity ('partition1', 'row1');
437 $entity->FullName = "Maarten";
438 $entity->Age = 25;
439 $entity->Visible = true;
441 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
442     'table.core.windows.net', 'myaccount', 'myauthkey'
444 $result = $storageClient->insertEntity('testtable', $entity);
446 // Prüfen des Zeitpunktes und von Etag der neu erstellten Entität
447 echo 'Zeitpunkt: ' . $result->getTimestamp() . "\n";
448 echo 'Etag: ' . $result->getEtag() . "\n";
449 ]]></programlisting>
450                 </example>
451             </sect5>
453             <sect5 id="zend.service.windowsazure.storage.table.entities.api.retrieve-by-id">
454                 <title>Empfangen einer Entität durch Partitionsschlüssel und Zeilenschlüssel</title>
456                 <para>
457                     Durch Verwendung des folgenden Codes kann eine Entität durch seinen
458                     Partitions- und Zeilenschlüssel. Es ist zu beachten das die Tabelle und die
459                     Entität bereits vorher erstellt worden sein müssen.
460                 </para>
462                 <example
463                     id="zend.service.windowsazure.storage.table.entities.api.retrieve-by-id.example">
464                     <title>
465                         Empfangen einer Entität durch dessen Partitions- und Zeilenschlüssel
466                     </title>
468                     <programlisting language="php"><![CDATA[
469 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
470     'table.core.windows.net', 'myaccount', 'myauthkey'
472 $entity= $storageClient->retrieveEntityById(
473     'testtable', 'partition1', 'row1', 'SampleEntity'
475 ]]></programlisting>
476                 </example>
477             </sect5>
479             <sect5 id="zend.service.windowsazure.storage.table.entities.api.updating">
480                 <title>Eine Entität aktualisieren</title>
482                 <para>
483                     Bei Verwendung des folgenden Codes kann eine Entität aktualisiert werden. Es ist
484                     zu beachten das die Tabelle und die Entität hierfür bereits vorher erstellt
485                     worden sein muss.
486                 </para>
488                 <example id="zend.service.windowsazure.storage.table.api.entities.updating.example">
489                     <title>Aktualisieren einer Entität</title>
491                     <programlisting language="php"><![CDATA[
492 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
493     'table.core.windows.net', 'myaccount', 'myauthkey'
495 $entity = $storageClient->retrieveEntityById(
496     'testtable', 'partition1', 'row1', 'SampleEntity'
499 $entity->Name = 'Neuer Name';
500 $result = $storageClient->updateEntity('testtable', $entity);
501 ]]></programlisting>
502                 </example>
504                 <para>
505                     Wenn man sicherstellen will das die Entität vorher noch nicht aktualisiert wurde
506                     kann man prüfen ob das <acronym>Etag</acronym> der Entität angehakt ist. Wenn
507                     die Entität bereits aktualisiert wurde, schlägt das Update fehl um
508                     sicherzustellen das neuere Daten nicht überschrieben werden.
509                 </para>
511                 <example
512                     id="zend.service.windowsazure.storage.table.entities.api.updating.example-etag">
513                     <title>Aktualisieren einer Entität (mit Etag Prüfung)</title>
515                     <programlisting language="php"><![CDATA[
516 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
517     'table.core.windows.net', 'myaccount', 'myauthkey'
519 $entity = $storageClient->retrieveEntityById(
520     'testtable', 'partition1', 'row1', 'SampleEntity'
523 $entity->Name = 'Neuer Name';
525 // Der letzte Parameter instruiert den Etag Check:
526 $result = $storageClient->updateEntity('testtable', $entity, true);
527 ]]></programlisting>
528                 </example>
529             </sect5>
531             <sect5 id="zend.service.windowsazure.storage.table.entities.api.delete">
532                 <title>Löschen einer Entität</title>
534                 <para>
535                     Bei Verwendung des folgenden Codes kann eine Entität gelöscht werden. Es ist zu
536                     beachten das die Tabelle und die Entität hierfür bereits erstellt worden sein
537                     müssen.
538                 </para>
540                 <example id="zend.service.windowsazure.storage.table.entities.api.delete.example">
541                     <title>Löschen einer Entität</title>
543                     <programlisting language="php"><![CDATA[
544 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
545     'table.core.windows.net', 'myaccount', 'myauthkey'
547 $entity = $storageClient->retrieveEntityById(
548     'testtable', 'partition1', 'row1', 'SampleEntity'
550 $result = $storageClient->deleteEntity('testtable', $entity);
551 ]]></programlisting>
552                 </example>
553             </sect5>
554         </sect4>
556         <sect4 id="zend.service.windowsazure.storage.table.entities.querying">
557             <title>Durchführen von Abfragen</title>
559             <para>
560                 Abfragen im <classname>Zend_Service_WindowsAzure_Storage_Table</classname> Tabellen
561                 Speicher können auf zwei Wegen durchgeführt werden:
562             </para>
564             <itemizedlist>
565                 <listitem>
566                     <para>
567                         Durch manuelles Erstellen einer Filter Kondition (was das Lernen einer neuen
568                         Abfrage Sprache beinhaltet)
569                     </para>
570                 </listitem>
572                 <listitem>
573                     <para>
574                         Durch Verwendung des fluent Interfaces welches von
575                         <classname>Zend_Service_WindowsAzure_Storage_Table</classname> angeboten
576                         wird.
577                     </para>
578                 </listitem>
579             </itemizedlist>
581             <para>
582                 Bei Verwendung des folgenden Codes kann eine Tabelle abgefragt werden indem eine
583                 Filter Kondition verwendet wird. Es ist zu beachten das die Tabelle und die
584                 Entitäten hierfür vorher bereits erstellt worden sein müssen.
585             </para>
587             <example id="zend.service.windowsazure.storage.table.entities.querying.query-filter">
588                 <title>Durchführen einer Abfrage bei Verwendung einer Filter Kondition</title>
590                 <programlisting language="php"><![CDATA[
591 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
592     'table.core.windows.net', 'myaccount', 'myauthkey'
594 $entities = $storageClient->storageClient->retrieveEntities(
595     'testtable',
596     'Name eq \'Maarten\' and PartitionKey eq \'partition1\'',
597     'SampleEntity'
600 foreach ($entities as $entity) {
601     echo 'Name: ' . $entity->Name . "\n";
603 ]]></programlisting>
604             </example>
606             <para>
607                 Durch Verwendung des folgenden Codes kann eine tabelle abgefragt werden indem ein
608                 fluid Interface verwendet wird. Es ist zu beachten das die Tabelle und die
609                 Entität hierfür bereits vorher erstellt worden sein müssen.
610             </para>
612             <example id="zend.service.windowsazure.storage.table.api.entities.query-fluent">
613                 <title>Durchführen einer Abfrage bei Verwendung eines Fluid Interfaces</title>
615                 <programlisting language="php"><![CDATA[
616 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
617     'table.core.windows.net', 'myaccount', 'myauthkey'
619 $entities = $storageClient->storageClient->retrieveEntities(
620     'testtable',
621     $storageClient->select()
622                   ->from($tableName)
623                   ->where('Name eq ?', 'Maarten')
624                   ->andWhere('PartitionKey eq ?', 'partition1'),
625     'SampleEntity'
628 foreach ($entities as $entity) {
629     echo 'Name: ' . $entity->Name . "\n";
631 ]]></programlisting>
632             </example>
633         </sect4>
635         <sect4 id="zend.service.windowsazure.storage.table.entities.batch">
636             <title>Batch Operationen</title>
638             <para>
639                 Dieser Abschnitt demonstriert wie die Tabellen Entitäts Gruppen Transaktions
640                 Features verwendet werden können welche vom Windows Azure Tabellen Speicher
641                 angeboten werden. Der Windows Azure Tabellen Speicher unterstützt Batch
642                 Transaktionen auf Entitäten welche in der gleichen Tabelle sind und der gleichen
643                 Partitionsgruppe angehören. Eine Transaktion kann bis zu 100 Entitäten enthalten.
644             </para>
646             <para>
647                 Das folgende Beispiel verwendet eine Batch Operation (Transaktion) um ein Set von
648                 Entitäten in die Tabelle "testtable" einzufügen. Es ist zu beachten das die Tabelle
649                 hierfür bereits vorher erstellt worden sein muss.
650             </para>
652             <example id="zend.service.windowsazure.storage.table.api.batch">
653                 <title>Ausführen einer Batch Operation</title>
655                 <programlisting language="php"><![CDATA[
656 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
657     'table.core.windows.net', 'myaccount', 'myauthkey'
660 // Batch starten
661 $batch = $storageClient->startBatch();
663 // Entitäten mit Batch einfügen
664 $entities = generateEntities();
665 foreach ($entities as $entity) {
666     $storageClient->insertEntity($tableName, $entity);
669 // Übermitteln
670 $batch->commit();
671 ]]></programlisting>
672             </example>
673         </sect4>
674     </sect3>
676     <sect3 id="zend.service.windowsazure.storage.table.sessionhandler">
677         <title>Session Handler für Tabellen Speicher</title>
679         <para>
680             Wenn eine <acronym>PHP</acronym> Anwendung auf der Windows Azure Plattform in einem
681             Load-Balanced Modus läuft (wenn 2 oder mehr Web Rollen Instanzen laufen), ist es
682             wichtig dass <acronym>PHP</acronym> Session Daten zwischen mehreren Web Rollen Instanzen
683             verwendet werden können. Die Windows Azure SDK von <acronym>PHP</acronym> bietet die
684             Klasse <classname>Zend_Service_WindowsAzure_SessionHandler</classname> an welche den
685             Windows Azure Tabellen Speicher als Session Handler für <acronym>PHP</acronym>
686             Anwendungen verwendet.
687         </para>
689         <para>
690             Um den <classname>Zend_Service_WindowsAzure_SessionHandler</classname> Session Handler
691             zu verwenden sollte er als Default Session Handler für die <acronym>PHP</acronym>
692             Anwendung registriert sein:
693         </para>
695         <example id="zend.service.windowsazure.storage.table.api.sessionhandler-register">
696             <title>Registrierung des Tabellen Speicher Session Handlers</title>
698             <programlisting language="php"><![CDATA[
699 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
700     'table.core.windows.net', 'myaccount', 'myauthkey'
703 $sessionHandler = new Zend_Service_WindowsAzure_SessionHandler(
704     $storageClient , 'sessionstable'
706 $sessionHandler->register();
707 ]]></programlisting>
708         </example>
710         <para>
711             Der obenstehende Klassenname registriert den
712             <classname>Zend_Service_WindowsAzure_SessionHandler</classname> Session Handler und
713             speichert Sessions in einer Tabelle die "sessionstable" genannt wird.
714         </para>
716         <para>
717             Nach der Registrierung des
718             <classname>Zend_Service_WindowsAzure_SessionHandler</classname> Session Handlers
719             können Session gestartet und auf dem gleichen Weg wie normale <acronym>PHP</acronym>
720             Sessions verwendet werden:
721         </para>
723         <example id="zend.service.windowsazure.storage.table.api.sessionhandler-usage">
724             <title>Verwendung des Tabellen Speicher Session Handlers</title>
726             <programlisting language="php"><![CDATA[
727 $storageClient = new Zend_Service_WindowsAzure_Storage_Table(
728     'table.core.windows.net', 'myaccount', 'myauthkey'
731 $sessionHandler = new Zend_Service_WindowsAzure_SessionHandler(
732     $storageClient , 'sessionstable'
734 $sessionHandler->register();
736 session_start();
738 if (!isset($_SESSION['firstVisit'])) {
739     $_SESSION['firstVisit'] = time();
742 // ...
743 ]]></programlisting>
744         </example>
746         <warning>
747             <para>
748                 Der <classname>Zend_Service_WindowsAzure_SessionHandler</classname> Session Handler
749                 sollte registriert werden bevor ein Aufruf zu
750                 <methodname>session_start()</methodname> durchgeführt wird!
751             </para>
752         </warning>
753     </sect3>
754 </sect2>