[MySQL] Maksymalna ilość jednoczesnych połączeń

0

Witam
Stworzyłem bazę danych w MySQL. Myślę że mogę mieć z nią problem ze względu na dużą liczbę użytkowników korzystających z niej jednocześnie. Ile może być maksymalnie jednoczesnych połączeń do bazy danych? Wiem że pewnie będzie to zależało od procesora i od ramu. Chciałbym zainstalować bazę na linuxie. Problem w tym że z założenia z bazy może korzystać nawet kilkadziesiąt tysięcy osób jednocześnie. Czy MySQL sobie z tym poradzi? Jak to można rozwiązać? Może jakaś inna baza danych? Proszę o pomoc.

0

ale oczywiście nie chciało się poszukać w dokumentacji http://dev.mysql.com/doc/refman/5.0/en/too-many-connections.html

0

z tego wynika że MySQL może obsłużyć maksymalnie 4000 połączeń jednocześnie, ale dla mnie to za mało. Jest jakieś wyjście żeby to "obejść"?

0

więcej to już sam system nie wydoli
ja widzę tylko drugi serwer i replikacja, ew możesz poszukać ile np. oracle jest w stanie obsłużyć max połączeń

0

Muszę zrobić coś takiego, że przykładowo 15 000 użytkowników korzysta w jednym czasie z jednej tabeli w MySQL'u. Pomyślałem żeby zamiast cały czas podtrzymywać ich połączenia przy każdej operacji INSERT/DELETE/SELECT program łączył się na chwilę z bazą i natychmiast rozłączał. Ale czy samo łączenie i rozłączanie dużej liczby użytkowników w krótkim czasie nie zwolni pracy serwera?

0

możesz jeszcze napisać serwer aplikacji, który będzie działał mniej więcej tak

połączenia userów serwer aplikacji (SA) baza
-> \
-> |->
-> / |
|
-> \ |
-> |-> |
-> / |
|
-> -> /

to znaczy serwer aplikacji będzie otwierał np. na każde 100 połączeń od userów jedno połączenie do bazy i w ramach tego jednego połączenia będzie obsługiwał sekwencyjnie tych 100 userów. Oczywiście jeśli podłączonych będzie tylko 10 userów to SA otworzy 10 połączeń z bazą, żeby nie blokować userów.

co do Twojego pytania to nie jestem w stanie odpowiedzieć na nie bo pojęcia nie mam co tworzysz i jaka jest specyfika, jakie będą zapytania, ile danych itp

0

piszę komunikator. Rozmowy użytkowników przechowywane są w jednej tabeli. Co 5 sekund klient łączy się z bazą i sprawdza czy ktoś coś do niego napisał, jeśli tak to pobiera wiadomość i kasuje ją z tabeli. Wiadomości dodawane są do tej samej tabeli "tylko" wtedy jeśli dany użytkownik coś do kogoś napisze.

0

jak dla mnie BD do zarządzania wiadomościami to porażka.
Lepiej napisać serwer aplikacji, przez który będą się łączyć wszyscy i który będzie wysyłał do odbiorcy informację, że ma wiadomość a bazy używał tylko i wyłącznie do przechowywania wiadomości.
Jeśli ten komunikator ma działać i ktoś ma z niego kokoRZystaćystać to zastanó się poważnie nad tym. BTW odpytywanie co 5 sekund serwera BD w necie zabije cały system. Przy większej ilości userów mogę Ci zagwarantować, że przypadek, gdzie user nie dostanie wiadomości albo dostanie ją kilka razy nie będzie niczym nienormalnym

0

Chciałem to zrobić jak najprościej bez pisania serwera, ale widzę że chyba się nie obejdzie bez tego. Dzięki za pomoc

0

Ale poczekaj. Jak to robi np jabber? Z tego co wyczytałem to działa podobnie do serwera pocztowego, z tym że wiadomości są wysyłane i odbierane w czasie rzeczywistym. Czyli według mnie klient też łączy się z serwerem, wysyła wiadomość i rozłącza.
Z drugiej strony jak bym sam napisał swój serwer do obsługi mojego programu to też nie wiem jak by się zachował przy tak dużej liczbie użytkowników. Chodzi tutaj też o platformę sprzętową. Na jakim sprzęcie/systemie to postawić? Chodzi mi o darmowe rozwiązania.

0

jabber ma własny serwer (w sensie program), który umożliwia
a) komunikacjęm między userami
b) "składowanie" wiadomości, które nie mogą być dostarczone (np. user niezalogowany)
c) komunikacjęm iędzy serwerami

jabber ma własny protokół i na 100% nie jest to wysyłanie maili - z tymi mailami to było takie porównanie

BTW w jabberze połączenie jest aktywne cały czas jak jesteś zalogowany (zauważ, że nie ma jednego serwera jabbera tylko jest ich wiele)

BTW2 tak jak pisałem - jeśli ten program ma naprawdę działać i ktoś ma z niego kokoRZystaćystać to zapomnij o odpytywaniu jakiej kolwiek bazy co 5 sekund

0

Pooling połączeń rozwiązuje sprawę. Na stałe jest otwarte np. 100 połączeń.
Serwer aplikacyjny do czegoś takiego mieć musisz. Są gotowe, dobre serwery aplikacyjne, które robią pooling połączeń. Oblukaj sobie Spring Framework + Jetty / Resin ze szczególnym naciskiem na commons-dbcp.

BTW: Nie chcę Cię jakoś bardzo zniechęcać, ale jeśli zadajesz takie pytania, to będzie Ci raczej ciężko napisać coś takiego samemu. Napisanie porządnego serwera aplikacyjnego do komunikacji z taką liczbą użytkowników wymaga nieco doświadczenia/talentu.

0

Może i będzie ciężko. Ale chciałbym spróbować. Od czego można zacząć? Jakieś teksty, porady?

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