Giter Site home page Giter Site logo

exam's Introduction

How to set up in a few steps?

Vyhledání informací o produktu

Popis problému

Náš systém uchovává informace o jednotlivých produktech v ElasticSeach a MySQL databázi. Data jsou identická v obou databázích, primárně se dotazujeme ElasticSearch databáze, ale čas od času je třeba získávat data přímo z MySQL (třeba když provádíme různé experimenty s ElasticSeach) – v tuto chvíli samozřejmě musíme dál našim zákazníkům na fron-endu zobrazovat data, takže je třeba přepnout na MySQL.

Vzhledem k tomu, že provoz na našich serverech je často extrémní, potřebujeme samozřejmě i data o produktech cachovat. Z počátku stačí cachovat do souboru, ale je třeba počítat s tím, že v budoucnu použijete nějakou pokročilejší technologii - a to snadno jen přepnutím v konfiguraci aplikace.

Protože marketingové oddělení chce dlouhodobě sledovat zájem o jednotlivé produkty, je třeba také počítat počet dotazů na konkrétní produkty. Z počátku opět postačí ukládání v plain-textu, ale je třeba počítat s tím, že v budoucnu použijete pokročilejší technologii, nebo budete chtít změnit umístění těchto dat.

Úkol

Vytvořte controller s metodou přijímající ID produktu. Metoda bude vracet data o produktu ve formátu JSON. Základní workflow:

  • Je zavolán dotaz na produkt s jeho ID
  • Jestliže je produkt zacachován, je vrácen z cache
  • Jestliže produkt není v cache, dotážeme se ElasticSearch/MySQL databáze a výsledek uložíme do cache
  • Počet dotazů na tento produkt zvýšíme o jedna
  • Vrátíme data o produktu ve formátu JSON

Controller může vypadat například takto:

class ProductController
{
    /**
    * @param string $id 
    * @return string
    */
    public function detail($id)
    {
        // do stuff and return json
    }
}

Dodatečné informace

Máme drivery pro ElasticSearch i MySQL, takže je nemusíte psát. Po zavolání metody získáte data o produktu v poli.

Drivery implentují následující interface:

interface IElasticSearchDriver
{
    /**
    * @param string $id * @return array
    */
    public function findById($id);
}

interface IMySQLDriver
{
    /**
    * @param string $id * @return array
    */
    public function findProduct($id);
}

Náš Framework předává všechno, co potřebujete. Jestliže potřebujete předat nějaké parametry do konstruktoru controlleru, vždy vám předá sám ty správné (nemusíte se tedy o toto starat). Předáte-li jakékoli ID produktu do driveru, vždy najde produkt – nemusíte se tedy zabývat výjimkami typu „Not found“

Cache je nekonečná – nemusíte se starat o její invalidaci. Jednou zacachovaná data nepotřebujeme nikdy mazat.

Informace o počtech dotazů na produkt jsou jen jednoduché páry (ID Produktu) => (počet dotazů), žádná jiná data nejsou potřeba.

exam's People

Contributors

bernyho avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.