Zend_Service_WindowsAzure_Table.xml 29 KB

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