Problem z obstawianiem meczy (MySQL)

0

Witam, w wolnym czasie mam zamiar stworzyć bazę danych Mistrzostw Świata. Na stronie będzie można utworzyć konto i obstawić wszystkie mecze i tu mam zagwozdkę:
-chciałbym aby można było obstawić wszystkie mecze na samym początku przed mistrzostwami;
-chciałbym aby można było edytować mecze jeszcze nie rozpoczęte (zmienić wcześniej postawiony wynik), a mecze rozpoczęte lub zakończone były zablokowane;
i tu się trochę zawiesiłem, mianowicie jak ugryźć temat obstawienia meczy. Czy każdy mecz (zakład jednego meczu) powinien mieć osobny rekord w bazie czy może jeden rekord powinien zawierać wszystkie obstawione mecze z zablokowaną możliwością zmiany już rozpoczętych. Jak najlepiej to przechowywać ? Powiem szczerze że nie mogę tego rozwiązać :/
Dzięki z góry za pomoc.
Pozdrawiam.

0

Każdy mecz to osobny wpis. Do tego dodajesz jakąś kolumnę - np."rozpoczęty" i pozwalasz jedynie edytować mecze, które posiadają "rozpoczęty" ustawione na "nie".

Twoim problemem jest teraz pilnować, aby w odpowiednim momencie zmieniać tę wartość.

1

Ewentualnie wpisz w kazdym rekordzie (meczu) date i godzine rozpoczecia i porownuj z aktualna.

0

Ewentualnie wpisz w kazdym rekordzie (meczu) date i godzine rozpoczecia i porownuj z aktualna.

Jest to jakaś opcja, myślałem o tym, ale moim zdaniem jednak dodanie kolumny "rozpoczęty" jest lepszą opcją, przynajmniej z dwóch powodów:

  1. jest to mniej obciążające. Pobierając dane z bazy dajesz w zapytaniu prosty warunek (WHERE rozpoczęty = "nie"), a w wypadku sprawdzania daty, wymaga to za każdym razem pobrania aktualnej daty z serwera. Aczkolwiek, w przypadku małych stron, ten narzut będzie nieodczuwalny

  2. ważniejszy powód: jeśli z jakiejś przyczyny (błąd, awaria albo celowe działanie) ktoś przestawi czas, może się pojawić sytuacja, w której zakończone mecze staną się edytowalne. Sam sobie odpowiedz na pytanie, jak duże zamieszanie może z tego powodu wyniknąć.

0
cerrato napisał(a):

Ewentualnie wpisz w kazdym rekordzie (meczu) date i godzine rozpoczecia i porownuj z aktualna.

Jest to jakaś opcja, myślałem o tym, ale moim zdaniem jednak dodanie kolumny "rozpoczęty" jest lepszą opcją, przynajmniej z dwóch powodów:

  1. jest to mniej obciążające. Pobierając dane z bazy dajesz w zapytaniu prosty warunek (WHERE rozpoczęty = "nie"), a w wypadku sprawdzania daty, wymaga to za każdym razem pobrania aktualnej daty z serwera. Aczkolwiek, w przypadku małych stron, ten narzut będzie nieodczuwalny

  2. ważniejszy powód: jeśli z jakiejś przyczyny (błąd, awaria albo celowe działanie) ktoś przestawi czas, może się pojawić sytuacja, w której zakończone mecze staną się edytowalne. Sam sobie odpowiedz na pytanie, jak duże zamieszanie może z tego powodu wyniknąć.

Nie wiem, czy można bardziej się mylić.

Do każdego meczu dodajesz czas rozpoczęcia DATETIME a następnie sprawdzasz WHERE dataRozpoczecia < NOW()

  1. o jakim zwiększonym obciążeniu tu mowa?
  2. w jaki sposób chcesz "przestawić czas"?

Nie wspomnę już nawet, że taki sposób działa AUTOMATYCZNIE. Nic więcej chyba nie trzeba dodawać

0

NOW() jest jakąś funkcją, której wywołanie jednak jest bardziej zasobożerne, niż odczytanie wartości "tak" lub "nie" z tabeli.
Poza tym zauważ, że napisałem, iż przy małych i średnich projektach raczej nie będzie to odczuwalne.

Istotniejszy jest argument z datą. Mi kiedyś w wykupionym VPS'ie podczas przywracania maszyny wirtualnej czas się rozjechał. Może akurat miałem pecha, albo ktoś popełnił błąd, ale faktem jest, że jeśli to jest maszyna, na której różne osoby coś wykonują (prace administracyjne, pisanie skryptu z meczami itp.), istnieje ryzyko takiej "wpadki". Oczywiście - w teorii nie powinno się to stać. Ale tak samo (w teorii) nie ma wybuchów gazu czy wypadków samochodowych.

0

W turnieju wezmą udział 32 reprezentacje krajów. Łącznie na mistrzostwach zostaną rozegrane 64 mecze na 12 stadionach.

Czyli jednorazowo dla kazdego uzytkownika mamy 64 mecze. Nie obciazy to chyba za bardzo serwera :)

0

Czyli jednorazowo dla kazdego uzytkownika mamy 64 mecze. Nie obciazy to chyba za bardzo serwera

Przecież od samego początku pisałem, że **tutaj **raczej argument wydajności nie ma zastosowania.

Aczkolwiek też nie do końca się zgadzam z tym, co napisałeś - bo nie ilość meczów jest ważna, ale ilość osób, które będą tam się logować i aktywnie udzielać (istotny jest generowany ruch). Meczów (czy jakichkolwiek innych zdarzeń) może być 5, ale to nie ta liczba, ale ilość wejść ma znaczenie. Nawet przy tych 5 meczach, jeśli ilość wejść byłaby liczona w dziesiątkach/setkach tysięcy na minutę, to serwer mocno by dostał po tyłku i wtedy każde wywołanie NOW() przemnożone przez te dziesiątki tysięcy razy dałoby już odczuwalną różnicę w obciążeniu maszyny.

0

Patrząc na to, że MŚ już za ca 3 tygodnie, a system nie ma nawet zbudowanych podstaw to nie spodziewałbym się setek tysięcy zapytań na minutę ;)
Uważam też, że większe jest prawdopodobieństwo tego, że kolega zapomni zmienić parametr w danym meczu w odpowiedniej chwili, niż serwer postanowi zmienić aktualną datę. Proponowane przez Ciebie rozwiązanie jest zwyczajnie "nie po inżyniersku".

0

Chyba lepszym rozwiązaniem będzie dodanie tego czasu do każdego meczu niż ręczne ustawianie czy mecz był rozegrany czy nie, a na stronę zalogowanych będzie kilkanaście osób więc o obciążeniach nie ma tu mowy ;) . Dzięki za wszystkie odpowiedzi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1