Jedna, czy wiele tabel? Potrzebna rada.

0

Witam

Problem jest następujący: Program: komunikator. Rozmowy będą obsługiwane przez jeden centralny serwer. Zamysł jest taki, żeby archiwum rozmów przechowywać właśnie na serwerze w bazie danych, a więc na przykład w tabeli. Moje pytanie jest takie: czy szybszym, wydajniejszym, pochłaniającym mniejsze ilości zasobów serwera i bezpieczniejszym rozwiązaniem będzie użycie jednej tabeli dla wszystkich użytkowników (max. 30), czy też stworzenie dla każdego usera osobnej tabeli, przechowującej tylko jego rozmowy?

Pozdrawiam

0

Hmmm... Archiwum rozmów na serwerze? Permanentna inwigilacja :).

A tak poważnie - jeśli już chcesz to zapisywać w bazie danych, to tylko w jednej tabeli! Rozwiązanie z wieloma tabelami może i byłoby (ale nawet jeśli, to chyba w minimalnym stopniu) szybsze, ale bardzo nieeleganckie i kompletnie nieskalowalne. Dodatkowo - nieoptymalne, bo przecież każdą wiadomość musiałbyś przechowywać 2 razy (w tabeli odbiorcy i nadawcy).

Ja to sobie wyobrażam jako tablicę w postaci:

[NADAWCA] [ODBIORCA] [KOMUNIKAT] [CZAS]

0

a wyobrazasz sobie ile czasu bedzie zajmować przetwarzanie pojedynczych komunikatów lub po prostu ile bedzie rekordów w bazie? (nawet przy małej liczbie uzytkowników komunikatora?)

Jesli już to najlepiej zapisywać całość pojedynczej rozmowy w nowym rekordzie. Najlepiej jednak byłoby zrobić zapis na plikach - bedziesz wtedy tylko ograniczony ilością miejsca na dysku a nie jeszcze wydajnością serwera, który bedzie musiał obsłużyc baze

0

Ja to sobie wyobrażam jako tablicę w postaci:

[NADAWCA] [ODBIORCA] [KOMUNIKAT] [CZAS]

i np. jeszcze jedno pole [ODCZYTANE] ustawiane na 1 lub 0 - bo przecież odbiorca może mieć wyłączony komunikator... Czyli wiadomości mogą czekać na odebranie.

Oczywiście można kombinować dalej ;)

0
SebaZ napisał(a)

a wyobrazasz sobie ile czasu bedzie zajmować przetwarzanie pojedynczych komunikatów lub po prostu ile bedzie rekordów w bazie? (nawet przy małej liczbie uzytkowników komunikatora?)
Jesli już to najlepiej zapisywać całość pojedynczej rozmowy w nowym rekordzie. Najlepiej jednak byłoby zrobić zapis na plikach - bedziesz wtedy tylko ograniczony ilością miejsca na dysku a nie jeszcze wydajnością serwera, który bedzie musiał obsłużyc baze

jeśli chodzi o wyszukiwanie to na plikach będzie wolniej a już na pewno bardziej skomplikowanie. Poza tym jeśli ktoś się decyduje na coś takiego to zdaje sobie sprawę, że nie będzie to 10MB na rok. No i jeśli chodzi o bazę to nawet jakiś Celeron 1GHz i 256MB ramu spokojnie pociągnie coś takiego - w końu przy archiwum (podkreślam archiwum) szybkość na poziomie 0,1s nie jest wymagana

a co do głównego pytania to pomysły z osobną tabelą dla każdego usera prędzej czy później się mszczą

0

no dobra masz rację. W mojej wypowiedzi chciałem powiedzieć, że lepiej zapisywać w pojedynczych rekordach całe rozmowy, nie tylko pojedyncze wiadomosci. No ale pisząc zboczyłęm z toru :P

0

Taka jedna, mala uwaga do tematu, ktos tu wspomnial o plikach, bo to odciazy serwer bazy - rozumowanie troche bledne, przeciez plik nie jest jakas tam abstrakcja z nieba wzeta, zeby dokonac jakiejs operacji na pliku, obciaza sie system plikow, ktory przeciez tez ma co robic, powiedzmy, ze mamy kilka k plikow w jakims folderze i chcemy otworzyc jeden z nich (/katalog/plik.txt), jesli mamy do dyspozycji jakis stary system plikow (bez zadnych indeksow, bez niczego) to otwarcie takiego pliku moze troche zajac.

Niby baza tez korzysta z plikow, ale baza z reguly tworzy ich malo (jakby to bylo takie proste to moznaby zapisywac pliki pod nazwa jakiegos id czy na co mamy tam index zalozony).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.