Za prvé, PHP relace nejsou ve výchozím nastavení ukládány do paměti , jsou uloženy na disku, takže každý blok/relace, do které zapíšete, zabere místo na disku a ne paměť (dokud nepoužijete ke čtení dat relace PHP).
Ano, potenciálně jste efektivnější, ale ne, pokud chcete škálovat, a zde je důvod:
Ukládání dat v relacích
Je naprosto přijatelné uložit nějaké data v relacích. Teoreticky neexistuje žádný limit (i když jsem se nikdy nepokoušel ho prolomit nebo dokonce tlačit, jen přejít na efektivnější řešení). Budete však omezeni místem na disku a PHP memory_limit()
.
Data uložená v relacích často zahrnují věci jako:
- Uživatelská jména
- Hashes
- Data registrace
- Další proměnné (ID/klíče uživatelských skupin atd.)
- Zprávy ve formátu Flash
- (NE hesla!)
Existuje však kompromis. Pokud se váš provoz (a využití) zvýší a ukládáte velké množství dat v $_SESSION
, velmi pravděpodobně začnete pozorovat problémy, a to jak z hlediska využití disku, tak paměti.
Nemyslím si, že s tím, co navrhujete, je nějaký problém, ale kromě položek, které jste uvedli a kde se výše uvedené příklady překrývají, je třeba opatrnosti.
Pokud chcete škálovat (horizontálně) a zachovat diskové relace, pak máte možnosti ( lepivé relace nebo storage area network jsou pár), protože disk na jednom serveru neukládá stejné relace jako disk na jiném serveru.
Umístění dat relace
Umístění, kam PHP ukládá data relace, můžete najít voláním: session_save_path()
nebo na CLI:
php -r 'echo session_save_path(), "\n";'
Nezmínili jste svůj operační systém, ale běžná umístění souborů relace (v různých typech OS) jsou:
/tmp
/var/lib/php5/
/var/lib/php/session
c:/wamp/tmp
Relace uložené na disku mají obvykle názvy souborů, které vypadají takto pomocí ls -al
:
-rw------- 1 www www 0 2013-07-09 20:12 sess_bdsdjedmvtas5njhr5530b8rq6
Stojí za zmínku, že často existují procesy sběru odpadu, které po určitých obdobích vyčistí mrtvé relace. Liší se podle OS, ale obvykle jsou k dispozici s různými instalacemi založenými na LAMP.
Další možnosti/přístupy úložiště relace
Ve vaší databázi
Data relací jsou často uložena v databázi místo na místním disku a to funguje dobře jak pro mikro, malé a (v závislosti na způsobu provedení) střední weby s rozumnou úrovní provozu.
Jako každé jiné řešení má své klady a zápory (např. možnost zakázat/vyhodit uživatele spuštěním dotazu namísto smazání souboru relace z /tmp
)
V paměti
u větších webů (s vyšším provozem) a zejména tam, kde je vysoký objem souběžných uživatelů, je rychlejší čtení/zápis do paměti pro velmi často používané proměnné nebo data namísto nadměrného zatížení vaší DB. Stále může a měl by být zapsán do DB (viz ukládání do mezipaměti pro zápis ), ale také být uchovávány v paměti pro efektivní přístup.
Jednou z obzvláště výhodných technik je ukládání do mezipaměti . Široce používaným příkladem open-source řešení kompatibilním s PHP je Memcached , které lze použít na jednom serveru nebo na mnoha [distribuovaných]. Viděl jsem to používat malé i velké firmy a stačí se podívat na to, kdo to používá/přispívá...