ChrisB
11.08.2010, 14:51:23
mam tabelkę z danymi tymczasowymi typu ile postów na forum razem, ile dzisiaj, ilu graczy sie zalogowało itp itd
zakładając że jest tych danych skończona ilość - obecnie około 20 - co jakiś czas dodaje coś nowego - myślę że 100 nie przekroczy wcale
jaki jest najlepszy sposób ich przechowywania w bazie? (przy każdym odświeżeniu strony wszystkie te dane są plus minus potrzebne - pobieram je na początku kodu i później niektóre z nich wykorzystuje - ale nie wiem które będą potrzebne więc pobieram wszystkie)
aktualnie mam je w formie wierszy - jako index,value (nazwa zmiennej, wartosc)
i pytanie czy nie lepiej zrobić to jako kolumną ?
Pilsener
11.08.2010, 21:54:24
Jeśli staty są generowane co jakiś czas to dobrą opcją jest słać to od razu do pliku (nawet zapytaniem sql da się to zrobic), metodę generującą staty odpalamy jak chcemy (zmiana bazy, przeterminowanie pliku, w tle co x czasu, gdy admin ma urodziny).
Zakładam, że jest to używane na stronie w takiej postaci, w jakiej jest generowane i nie służy do innych celów.
ChrisB
11.08.2010, 23:21:27
nie chce w pliku
co do danych - jakas część tej tabelki aktualizowana jest srednio raz na sekunde (tzn w szczycie 1 update na sekunde idzie do niej i jakies 3x select - takze w sumie jest to najczesciej operowana tabelka i dlatego cche by byla optymalnie ustawiona)
dlatego update set value='warotsc' where 'index'='nazwa zmiennej'
zamienil bym na update 'nazwakolumny - nazwa zmiennej' ='nowa wartosc' where id=1
i zamiast pobierac 20-100 rekordów pobierał bym 1 ze setka kolumn..
ma to sens?
Pilsener
12.08.2010, 21:50:43
Jeśli to mają być faktycznie dane tymczasowe i chcesz mieć to w bazie, to polecam tabele typu memory
A teoretycznie czy to ma sens... być może, ale masz się dostosować do charakterystyki serwisu i jego obciążenia, więc cel uświęca środki, dziś może to być update 1/sekunda a za pół roku 100. Najlepiej to kontrolować, wszelkie statystyki bym generował w tle, nawet jeden dodatkowy proces co sekundę jest lepszy, niż x dodatkowych zapytań do bazy na sekundę.
ChrisB
12.08.2010, 22:01:01
to nie są dane tymczasowe tylko dane typu:
- ilość osób w rankingu - zamiast pobierać z tablicy ranking ile jest rekordów - pobieram tą wartość i przy przeliczaniu rankingu ją uaktulaniam
- ilość postów na forum - zwiększana o 1 przy dodawaniu / zmniejszana przy kasacji
itp itd
także - nie sa to dane tymczasowe - ze je pobieram/modyfikuje i zapisuje inne dla kazdego - bardziej to jest taki cache pewnych wartości
ale nadal problem polega na tym:
czy jedna wartosc=1 wiersz w tablicy
czy może wszystkie naraz w jednym wierszu jako kolumny
i przetestowałbym ale nie bardzo mam jak więc dlatego pytam
Pilsener
13.08.2010, 22:49:57
Oddzielne pole dla każdej wartości, zgodne ze sztuką i bardziej intuicyjne. Zrób z tego tabelę memory by przyśpieszyć odczyt i aktualizację. I sam przyznałeś, że to ma być rodzaj cache, dlatego najlepiej by było zrobić tablicę tych wartości, zserializować ją i zapisać w pliku.
Crozin
13.08.2010, 23:26:47
Trzymasz po prostu jako zwykłą tabelę z kluczem i wartością. Ta tabela jest tak mała (te raptem 20 - 100 rekordów), że jestem niemalże pewien, że nie ma ona jakiegokolwiek realnego wpływu na wydajność Twojej aplikacji. Od biedy możesz ją sobie cache-ować i odświeżać co przykładowo 30 sekund.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.