Zend_Service_WindowsAzure_Table.xml 29 KB

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