Zend_Service_WindowsAzure_Table.xml 29 KB

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