Zend_Service_WindowsAzure_Table.xml 29 KB

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