Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql]tabela sesji
Black-Berry
post
Post #1





Grupa: Zarejestrowani
Postów: 663
Pomógł: 6
Dołączył: 3.06.2007
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Mam taką tabelę sesji:
  1. "CREATE TABLE session (
  2. `id` VARCHAR(64) NOT NULL, PRIMARY KEY(`id`),
  3. `last_modification` DATETIME, INDEX (`last_modification`),
  4. `data` TEXT
  5. ) ENGINE=InnoDB CHARACTER SET `utf8`;"


Chciałbym prosić o komentarze:
  • czy dobrze jeśli id jest jednoczesnie kluczem sesji a typ pola id to VARCHAR? Ponoć CHAR jest szybsze. To prawda?
  • czy index na polu last_modification coś mi da?
  • pole data trzymać będzie zserializowane dane sesji. Czy dobrze dać pole typu text? Moze są jakieś szybsze typy?
  • W jednej konfiguracji mySQL'a widziałem opcję ustawienia tabeli na MEMORY. Dokładnie nie pamiętam ale chyba to oznaczało, że tabela będzie przechowywana w RAM-ie. Czy to prawda? Mogę ustawić tylko tą tabelę żeby działała szybciej?
  • Mam też inne tabele które są stosunkowo małe a wymagają częstego odczytu (zapisu tylko raz na jakiś czas np. settingsy). Dane w nich są jednak ważniejsze. Czy można zrobić tak aby tabela siedziała w ramie i była szybko odczytywana a update oznaczałby zapis na dysku ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Black-Berry @ 16.09.2008, 00:15:43 ) *
  • czy dobrze jeśli id jest jednoczesnie kluczem sesji a typ pola id to VARCHAR? Ponoć CHAR jest szybsze. To prawda?

Zmiana pola na CHAR przy równoczesnym użyciu innego pola tekstowego o zmiennej długości nie przyniesie oczekiwanego rezultatu (w Twoim przypadku pole `data`).

Cytat(Black-Berry @ 16.09.2008, 00:15:43 ) *
  • czy index na polu last_modification coś mi da?

Tak. Indeksy powinno się zakładać na pola, po których będzie odbywało się wyszukiwanie lub sortowanie. Dodatkowo różnorodność danych w takich polach powinna być wysoka (w książce "MS SQL Server 2005. Programowanie" zostało to określone na poziomie 90%). Czyli nie ma sensu ustawiać indeksu na polu typu boolean bo nic się nie zyska, a wręcz straci (duplikacja danych). W Twoim przypadku indeks powinien być przydatny.

Cytat(Black-Berry @ 16.09.2008, 00:15:43 ) *
  • pole data trzymać będzie zserializowane dane sesji. Czy dobrze dać pole typu text? Moze są jakieś szybsze typy?

Ja bym sugerował olać serializację i skorzystać raczej z formatu JSON (json_encode" title="Zobacz w manualu PHP" target="_manual + json_decode" title="Zobacz w manualu PHP" target="_manual) aczkolwiek nie wiem jak się ma pod względem wydajności. Zaoszczędzisz sporo miejsca. Typ pola wydaje się jedynym sensownym.

Na resztę pytań wolę się nie wypowiadać aby nie napisać głupot.

PS: Na dzień dobry zmień InnoDB na MyISAM, które jest szybsze. Może potem zmienisz na Memory ale na razie olej dobrodziejstwa jakie daje InnoDB, z których i tak nie korzystasz.

Ten post edytował phpion 16.09.2008, 06:18:39
Go to the top of the page
+Quote Post

Posty w temacie
- Black-Berry   [mysql]tabela sesji   15.09.2008, 23:15:43
- - phpion   Cytat(Black-Berry @ 16.09.2008, 00:1...   16.09.2008, 06:16:03
- - osiris   [*] czy dobrze jeśli id jest jednoczesnie kluczem ...   16.09.2008, 23:44:18
- - Black-Berry   Cytat(osiris @ 17.09.2008, 00:44:18 )...   17.09.2008, 09:56:09
|- - phpion   Cytat(Black-Berry @ 17.09.2008, 10:5...   17.09.2008, 21:03:51
- - Black-Berry   tablice asocjacyjne.   17.09.2008, 23:22:42


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 12.10.2025 - 20:48