Windows Azure Storage pro PHPkáře
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Windows Azure Storage pro PHPkářeWindows Azure Storage pro PHPkáře

 

Windows Azure Storage pro PHPkáře

Google       Google       9. 3. 2011       14 023×

Windows Azure Storage je datové úložiště v cloudu, které poskytuje několik služeb. My se podíváme na strukturované úložiště Windows Azure Table Storage, které je v podstatě noSQL databází, kde můžete snadno uchovávat přímo objekty vaší aplikace. V článku se zaměříme na využití Windows Azure Table Storage a PHP.

Reklama
Reklama

Jedna ze služeb poskytovaných Windows Azure je tzv. Storage, které poskytuje tři typy úložišť – blob, queue a table.

  • Blob – uložiště pro nestrukturovaná data, typicky soubory
  • Queue – fronta pro zprávy
  • Table – uložiště pro strukturovaná data, typicky objekty

Podrobné informace najdete například na webu MSDN. V tomto článku se zaměříme pouze na podporu Windows Azure Table Storage v PHP.

Nemám přístup k Windows Azure, co mám dělat?

Nevadí. V podstatě celé prostředí Windows Azure můžete simulovat na lokálním počítači pomocí Windows Azure Software Development Kit. Nás bude hlavně zajímat Development Storage, která simuluje Windows Azure Storage na vašem počítači.

Protože Windows Azure SDK vyžaduje IIS a SQL Server 2008 (stačí Express), doporučuji nejdříve doinstalovat vše potřebné pomocí Web Platform Installer.

Přístup k Windows Azure Table Storage

Pro přístup k Windows Azure Table Storage se používá návrhový vzor REST. Stačí tedy správně sestavit URL, požadavek podepsat (http://msdn.microsoft.com/en-us/library/dd179428.aspx) a máte přístup k informacím, které jsou v tabulce uloženy. Ze serveru dostanete odpověď ve formátu ATOM. Několik příkladů:

Seznam tabulek

Požadavek:
https://msdays2010.table.core.windows.net/Tables()

Odpověď:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="https://msdays2010.table.core.windows.net/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Tables</title>
  <id>https://msdays2010.table.core.windows.net/Tables</id>
  <updated>2010-11-21T07:01:03Z</updated>
  <link rel="self" title="Tables" href="Tables" />
  <entry>
    <id>https://msdays2010.table.core.windows.net/Tables('Customers')</id>
    <title type="text"></title>
    <updated>2010-11-21T07:01:03Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Tables" href="Tables('Customers')" />
    <category term="msdays2010.Tables" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <content type="application/xml">
      <m:properties>
        <d:TableName>Customers</d:TableName>
      </m:properties>
    </content>
  </entry>
  <entry>
    <id>https://msdays2010.table.core.windows.net/Tables('testtable')</id>
    <title type="text"></title>
    <updated>2010-11-21T07:01:03Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Tables" href="Tables('testtable')" />
    <category term="msdays2010.Tables" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <content type="application/xml">
      <m:properties>
        <d:TableName>testtable</d:TableName>
      </m:properties>
    </content>
  </entry>
</feed>

Obsah tabulky Customers

Požadavek:
https://msdays2010.table.core.windows.net/Customers()

Odpověď:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="https://msdays2010.table.core.windows.net/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Customers</title>
  <id>https://msdays2010.table.core.windows.net/Customers</id>
  <updated>2010-11-21T07:03:24Z</updated>
  <link rel="self" title="Customers" href="Customers" />
  <entry m:etag="W/"datetime'2010-11-20T10%3A02%3A17.479744Z'"">
    <id>https://msdays2010.table.core.windows.net/Customers(PartitionKey='partition1',RowKey='2')</id>
    <title type="text"></title>
    <updated>2010-11-21T07:03:24Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Customers" href="Customers(PartitionKey='partition1',RowKey='2')" />
    <category term="msdays2010.Customers" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <content type="application/xml">
      <m:properties>
        <d:PartitionKey>partition1</d:PartitionKey>
        <d:RowKey>2</d:RowKey>
        <d:Timestamp m:type="Edm.DateTime">2010-11-20T10:02:17.479744Z</d:Timestamp>
        <d:Discount m:type="Edm.Double">0.2</d:Discount>
        <d:FirstName>Štěpán</d:FirstName>
        <d:LastName>C#</d:LastName>
      </m:properties>
    </content>
  </entry>
  <entry m:etag="W/"datetime'2010-11-20T10%3A01%3A45.6890838Z'"">
    <id>https://msdays2010.table.core.windows.net/Customers(PartitionKey='partition1',RowKey='4')</id>
    <title type="text"></title>
    <updated>2010-11-21T07:03:24Z</updated>
    <author>
      <name />
    </author>
    <link rel="edit" title="Customers" href="Customers(PartitionKey='partition1',RowKey='4')" />
    <category term="msdays2010.Customers" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
    <content type="application/xml">
      <m:properties>
        <d:PartitionKey>partition1</d:PartitionKey>
        <d:RowKey>4</d:RowKey>
        <d:Timestamp m:type="Edm.DateTime">2010-11-20T10:01:45.6890838Z</d:Timestamp>
        <d:FirstName>Štěpán</d:FirstName>
        <d:LastName>PHP</d:LastName>
        <d:Discount m:type="Edm.Double">0.1</d:Discount>
      </m:properties>
    </content>
  </entry>
</feed>

Abyste nemuseli psát vlastní kód pro sestavování dotazů, jejich podepisování a následné zpracování odpovědí, můžete použít knihovnu Windows Azure SDK for PHP (http://phpazure.codeplex.com/).

Windows Azure SDK for PHP

Po stažení knihovny Windows Azure SDK for PHP stačí rozbalit zip archiv na libovolné místo a upravit proměnnou include_pathphp.ini. Pro připojení na Windows Azure Table Storage musíte znát doménu, kde služba běží, jméno účtu (Account Name) a bezpečnostní klíč (Account Key).

V mém případě je doména table.core.windows.net, Account Name msdays2010 a Account Key r7h0…bQ==. Klíče máte dva, kdyby se jeden prozradil, tak použijete druhý, záložní a zkompromitovaný klíč vygenerujete znovu. Pokud budete chtít použít lokální Developer Storage, použijete následující nastavení (viz. http://msdn.microsoft.com/en-us/library/dd179339.aspx):

Doména: 127.0.0.1:10002
Account Name: devstoreaccount1
Account Key:
Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==

Pro připojené k Windows Azure Table Storage slouží objekt Microsoft_WindowsAzure_Storage_Table. Následující kód vypíše seznam tabulek:

<?php
    include_once 'Microsoft/WindowsAzure/Storage/Table.php';
    $storageClient = new Microsoft_WindowsAzure_Storage_Table('127.0.0.1:10002',
                                            'devstoreaccount1',
                                            'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==');
   $result = $storageClient->listTables();
    echo "Seznam tabulek:\r\n";
    foreach ($result as $table)
    {
        echo "\t" . $table->Name . "\r\n";
    }
?>

Vytvoření tabulky: $storageClient->createTable('Customers');

Pokud chcete do tabulky uložit nový záznam, je třeba nejdříve vytvořit třídu, která bude záznam popisovat. Protože se nejedná o relační databázi, je možné do jedné tabulky ukládat objekty, které odvozeny z různých tříd. Zjednodušeně by se dalo říct, co veřejná vlastnost třídy, to pole v tabulce. Každý záznam má tři povinné vlastnosti – PartitionKey, RowKey a Timestamp. Tyto vlastnosti najdete v základní třídě Microsoft_WindowsAzure_Storage_TableEntity, z které musí vaše třída vycházet. Protože je PHP slabě typový jazyk, je třeba pomocí komentářů říct, jaký datový typ budou jednotlivé vlastnosti ukládat. Popis datových typů najdete v dokumentaci (http://phpazure.codeplex.com/wikipage?title=Defining%20entities%20for%20Table%20Storage&referringTitle=Getting%20Started).

<?php
class Customer extends Microsoft_WindowsAzure_Storage_TableEntity
{
    /**
     * @azure FirstName Edm.String
     */
    public $FirstName;

    /**
     * @azure LastName Edm.String
     */
    public $LastName;

    /**
     * @azure Discount Edm.Double
     */
    public $Discount = 0.1;
}
?>

Uložení záznamu pak vypadá následovně:

$customer = new Customer('partition1', 'key1');
$customer->FirstName = 'Štěpán';
$customer->LastName = 'PHP';
$result = $storageClient->insertEntity('Customers', $customer);

Vypsání všech záznamů z tabulky Customers, které jsou v partition1 a měly by být datového typu Customer:

<?php
    include_once 'Microsoft/WindowsAzure/Storage/Table.php';
    include_once 'Customer.php';

    $storageClient = new Microsoft_WindowsAzure_Storage_Table('table.core.windows.net',
                                            'msdays2010',
                                            'r7h0Exq+77wD+bE9MRaMAP3QvOneW/mHrcSFODADl8wVe4FqIvGvswVxW0KCzKcyGqZej43qQFm1O3qPwktXbQ==');

    $entities = $storageClient->retrieveEntities(
    'Customers',
    'PartitionKey eq \'partition1\'',
    'Customer');

    foreach ($entities as $entity)
    {
        echo 'Name: ' . $entity->FirstName . ' ' . $entity->LastName . "\n";
    }
?>

V případě, že chcete záznam změnit, je třeba ho získat na základě EntityKey a použít metodu updateEntity.

<?php
    include_once 'Microsoft/WindowsAzure/Storage/Table.php';
    include_once 'Customer.php';

    $storageClient = new Microsoft_WindowsAzure_Storage_Table('table.core.windows.net',
                                            'msdays2010',
                                            'r7h0Exq+77wD+bE9MRaMAP3QvOneW/mHrcSFODADl8wVe4FqIvGvswVxW0KCzKcyGqZej43qQFm1O3qPwktXbQ==');


    $entity = $storageClient->retrieveEntityById('Customers', 'partition1', '4', 'Customer');

    $entity->LastName = 'PHP 5';
    $result = $storageClient->updateEntity('Customers', $entity, true);    
?>

Záznam pak logicky odstraníte metodou deleteEntity.

Závěr

Využití Windows Azure Table Storage je velmi jednoduché, zejména když máte dostupné knihovny, které komunikaci zapouzdřují.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Specialista pro vývojové nástroje ve společnosti Microsoft v České republice. Televize pro vývojáře, Vše pro vývojáře.

Nové články

Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Reklama
Reklama
Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý