Autorius Tema: Sesijos ir "teisės"  (Skaityta 1510 kartus)

Neprisijungęs Kalnų karalius

  • Naujokas
  • *
  • Įrašai: 104
  • Karma: +0/-0
    • Žiūrėti profilį
Sesijos ir "teisės"
« Įrašytas: 2014-06-10 20:18:55 pm »
Sveiki, nežinau ką rekomenduotumėte php kalboje naudoti išsaugoti vartotojo teisių parametrams. Galėčiau naudot konstantas, bet.. Esmė tame, kad pas mane labai daug parametrų bus, per 30 maždaug. Ir visus juos norėčiau gauti čia ir dabar, netraukinėt kiekvieną kart iš duomenų bazės. Ar su sesijomis galima sukurt gal kokius dvimačius masyvus?
4c61626173212

Neprisijungęs Lukas

  • Administratorius
  • Herojus
  • ******
  • Įrašai: 7431
  • Karma: +232/-15
    • Žiūrėti profilį
Ats: Sesijos ir "teisės"
« Atsakymas #1 Įrašytas: 2014-06-11 08:51:50 am »
tobuliausia tai sakyciau taip: imeti i duombaze ir cache'ini tos lentos modeli (aisku jei naudoji ORM, jei nenaudoji, tai galetum ir naudot :D ) tai zodziu cachini modeli kuri daznai trauki ir tiek, tada jokio skirtumo kur galiausiai guli ta data, vistiek ram'uose sedetu.

per 1 page requesta jei daug kartu klausineji tu paciu duomenu, tai as bent jau toki turiu pasirases, cia su phalcon'u, bet is esmes visi orm'ai vienodi, tai jei naudosi kazka kitka, tai turetu +- but tas pats:

<?php

class Model_CacheableModel extends Phalcon\Mvc\Model
{

    static 
$_cache = array();

    protected static function 
_createKey($parameters)
    {
        if (
is_numeric($parameters)) {
            
$parameters = array("id=:id:"'bind' => array('id' => $parameters));
        }
        
$uniqueKey = array();
        if (
is_array($parameters)) {
            foreach (
$parameters as $key => $value) {
                if (
is_scalar($value)) {
                    
$uniqueKey[] = $key ':' $value;
                } else {
                    if (
is_array($value)) {
                        
$uniqueKey[] = $key ':[' self::_createKey($value) . ']';
                    }
                }
            }
        } else {
            return 
md5(json_encode($parameters));
        }
        
$key join(','$uniqueKey);
        return 
$key;
    }

    public function 
save($data null$whiteList null)
    {
        
self::$_cache = array();
        return 
parent::save($data$whiteList);
    }

    public function 
update($data null$whiteList null)
    {
        
self::$_cache = array();
        return 
parent::update($data$whiteList);
    }

    public function 
delete()
    {
        
self::$_cache = array();
        return 
parent::delete();
    }

    public function 
refresh()
    {
        
self::$_cache = array();
        return 
parent::refresh();
    }

    public static function 
findFirst($parameters null)
    {
        
//Create an unique key based on the parameters
        
$key 'ff_' self::_createKey($parametersget_called_class());
        if (!isset(
self::$_cache[$key])) {
            
//Store the result in the memory cache
            
self::$_cache[$key] = parent::findFirst($parameters);
        }
        
//Return the result in the cache
        
return self::$_cache[$key];
    }

    public static function 
find($parameters null)
    {
        
//Create an unique key based on the parameters
        
$key 'f_' self::_createKey($parametersget_called_class());
        if (!isset(
self::$_cache[$key])) {
            
//Store the result in the memory cache
            
self::$_cache[$key] = parent::find($parameters);
        }
        
//Return the result in the cache
        
return self::$_cache[$key];
    }

    public static function 
count($parameters null)
    {
        
//Create an unique key based on the parameters
        
$key 'c_' self::_createKey($parametersget_called_class());
        if (!isset(
self::$_cache[$key])) {
            
//Store the result in the memory cache
            
self::$_cache[$key] = parent::count($parameters);
        }
        
//Return the result in the cache
        
return self::$_cache[$key];
    }

}

ir tada user lentos modelis jau turi toki klases aprasa:

<?php
class Model_User extends Model_CacheableModel
{
// your code.....
}
?>



jei nesi girdejes apie orm ir modeliu abstraction layer ant duombazes, tai pasiskaityk phalcono dokumentacijos sita psl ir bus tau aisku, nesvarbu ar poto naudosi phalcon ar kokia doctrine'a, vistiek is esmes tas pats:

http://docs.phalconphp.com/en/latest/reference/models.html



mano pvz, kaip pastebejai, yra cache'as i ram'a requesto metu, nes po page requesto issivalo tie kintamieji ir eina vel requesta i duombaze, man bent jau nera kol kas poreikio daryt sudetingiau, ir taip svetaine kraunas server-side per ~25-35ms.. (jei nenaudociau phalcon tikriausiai sis skaicius butu apie 10x didesnis, t.y. 250-350ms vien tik server side + dal networking, browser rending&painting, bet cia ne siai temai) jei reikia tau jau sudetingesniu sprendimu, tai siulau tada naudoti koki nors memcache'a ir ten cache'uot rezultatus. tik nepamirsk padaryt updeitinimo cache'o kai keicias duomenys duombazej. Jei jau turi tiek duomenu, kad apskritai reikia cache'uoti sql resultus kiekvienam page requestui, tai pabandyk nosql duombaze pasileist kaip cache'o layer'i (siulau elastic search arba mongo db, abu is esmes vienodi.) o jei pas tave lentose irasu maziau nei 10-100M, tai tikriausiai tau nieko tokio sudetingesnio nereikes ir uzteks simple mysql'o + jei idesi dar toki ram cache'a kaip pas mane, tai isvis galesi ramiai sedet, jau prades sql kas nors lagint  - sudek index'us ir vel galesi ramus sedet. siaip nepatariu deti indeksu is anksto, nes daznai juos buna sunku atspet ka det. kuo maziau indexu tuo greiciau write'ina i lenta. tik aisku susikonfigink kazkoki loginima kas vyksta su php/sql kodais. as bent jau galiu rekomenduoti newrelic.com servisa. free planas tikrai daug pasako apie serva.

Siaip ar anaip gudresniu sprendimu reikia mazdaug 100 lankomiausiu puslapiu, jei kalbant apie LT rinka. tai jei nesi nei vienas is ju, tikriausiai tau uzteks simple mysql + simple php. tik naudok naujas versijas ir lentom ka daug drozti zadi, bent jau kazkoki basic cache'a.


« Paskutinį kartą keitė: 2014-06-11 08:59:27 am sukūrė Lukas Liesis »
Jūsų draugas, kolega ir puslapio administratorius,

Lukas.

Gerda Photography
Serveriai.lt 50% nuolaida!
Free Hosting
Free Templates

Manualai.lt Forumas

Ats: Sesijos ir "teisės"
« Atsakymas #1 Įrašytas: 2014-06-11 08:51:50 am »