Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Przechowywanie "przedniotów" w bazie
GreenGo
post 26.05.2010, 15:22:55
Post #1





Grupa: Zarejestrowani
Postów: 265
Pomógł: 4
Dołączył: 30.08.2004

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


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 ?

Ten post edytował GreenGo 26.05.2010, 15:30:26
Go to the top of the page
+Quote Post
tehaha
post 26.05.2010, 15:31:56
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


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

Ten post edytował tehaha 26.05.2010, 15:32:35
Go to the top of the page
+Quote Post
GreenGo
post 26.05.2010, 17:17:38
Post #3





Grupa: Zarejestrowani
Postów: 265
Pomógł: 4
Dołączył: 30.08.2004

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


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 ?
Go to the top of the page
+Quote Post
Fifi209
post 26.05.2010, 17:19:47
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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 ;]


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
tehaha
post 26.05.2010, 17:30:05
Post #5





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


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

Ten post edytował tehaha 26.05.2010, 17:31:49
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:22