Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Przechowywanie "przedniotów" w bazie
Forum PHP.pl > Forum > Przedszkole
GreenGo
Witam,
oto kolejny problem, na którego jest wiele możliwości rozwiązania i nie wiem która najlepsza smile.gif
Tworzę grę w php, i każdy użytkownik (gracz) będzie mógł sobie kupować w sklepie przedmioty (broń, jedzenie itp.)
No i pytanie brzmi jak najlepiej (optymalnie) przechowywać te przedmioty w bazie ?
1. Stworzyć nową tabele która będzie je przechowywała(1 posiadanie przedmiotu 1 rekord) ? - tylko jak będzie 1000 graczy i każdy będzie miał 100 przedmiotów to ilość rekordów wyniesie 100 000:/
2. Przechowywać przedmioty oddzielone przecinkami w oddzielnym polu w tabelipostaci ? - trochę potem będzie roboty z przetwarzaniem tego pola
3. Stworzyć tabele z przedmiotami i w polach przechowywać id użytkowników którzy je mają?
4. Stworzyć tabele z przedmiotami i w polu w tabeli z graczami przechowywać id przedmiotów jakie posiada ?

Taki możliwości mi na razie przychodzą do głowy. Może ktoś ma lepszy pomysł ? Co będzie najwydajniejsze ?
tehaha
wydaje mi się, że najlepiej stworzyć osobną tabelę, która będzie wiązała gracza z przedmiotem czyli np.
player_artefact_assoc
assoc_id | artefact_id | player_id

wszystkie pola INT UNSIGNED

łatwo będziesz mógł z tym robić JOINY i co tam tylko zechcesz
GreenGo
No tak ale czy jeśli np. będzie w tej tabeli 100000 rekordów to to nie będzie za bardzo obciążać bazy jak dla każdego uzytkownika trzeba będzie odczytywać jego przedmioty ?
Fifi209
Cytat(GreenGo @ 26.05.2010, 18:17:38 ) *
No tak ale czy jeśli np. będzie w tej tabeli 100000 rekordów to to nie będzie za bardzo obciążać bazy jak dla każdego uzytkownika trzeba będzie odczytywać jego przedmioty ?


W razie czego masz cache jakby obciążało ;]
tehaha
ilość rekordów na pewno wpłynie na szybkość działania, ale w takim układzie jeżeli potrzebujesz wyświetlić przedmioty to robisz zwykły JOIN i prostym zapytaniem szybko wyciągasz to co potrzebne, a jeżeli będziesz trzymał przedmioty użytkownika po przecinku, albo w jakiejś tablicy to znacznie komplikuje wszystko, po za tym wydaje mi się, że operacje na polach typu INT, będą dużo szybsze niż na danych gromadzonych w VARCHAR

a co do zmniejszenia obciążenia możesz np zrobić tak, że raz pobrane przedmioty użytkownika wrzucasz do tablicy i zapisujesz w sesji i już nie wykonujesz więcej połączeń, chyba że gracz wykona działanie wpływające na liczbę przedmiotów
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.