Najlepszy sposób na przechowywanie wiadomości czatu w bazie danych? [zamknięte]
Buduję aplikację do czatu i chcę mieć pełną historię wszystkich wiadomości kiedykolwiek wysłanych w rozmowie na czacie. W tej chwili przechowuję każdą wiadomość jako pojedynczy wiersz w tabeli o nazwie 'messages'. Zdaję sobie sprawę, że ta tabela może rosnąć ogromny, jak nawet małe wiadomości, takie jak " Hi " będzie miał swój własny rekord bazy danych.
Czy ktoś może polecić bardziej skalowalne rozwiązanie mysql? Nie wymagam, aby poszczególne wiadomości były przeszukiwalne, edytowalne lub usuwalne. Czy cała rozmowa może być zapisana w jedno wielkie pole?
Chciałbym usłyszeć twoje pomysły!
3 answers
Nie ma nic złego w zapisywaniu całej historii w bazie danych, są przygotowani do tego typu zadań.
W rzeczywistości można znaleźć tutaj w Stack Overflow link do przykładowego schematu dla czatu: Przykład
Jeśli nadal martwisz się o rozmiar, możesz zastosować pewne optymalizacje do wiadomości grupowych, na przykład dodanie bufora do aplikacji, który naciskasz dopiero po pewnym czasie (około 1 minuty); w ten sposób unikniesz tylko wiadomości z 1 linii
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:33
Jeśli można uniknąć konieczności jednoczesnego zapisu do jednego pliku, wygląda na to, że nie potrzebujesz bazy danych do przechowywania wiadomości czatu.
Po prostu dołącz konwersację do pliku tekstowego(1 plik na użytkownika\konwersacja). i mieć strukturę katalogu / pliku
Oto uproszczony widok struktury plików:
chat-1-bob.txt
201101011029, hi
201101011030, fine thanks.
chat-1-jen.txt
201101011030, how are you?
201101011035, have you spoken to bill recently?
chat-2-bob.txt
201101021200, hi
201101021222, about 12:22
chat-2-bill.txt
201101021201, Hey Bob,
201101021203, what time do you call this?
Wtedy wystarczy zapisać userid, conversation id (guid ?) & odniesienie do nazwy pliku.
Myślę, że będzie Ci trudno dostać prostsze skalowalne rozwiązanie.
Możesz użyć LOAD_FILE
Aby uzyskać dane zobacz: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
Jeśli masz wymagania, aby odbudować rozmowę, musisz umieścić wartość (datę i godzinę) obok wysłanej wiadomości czatu (w pliku), aby umożliwić scalanie i sortowanie plików, ale w tym momencie prawdopodobnie warto rozważyć użycie bazy danych.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 07:55:12
Możesz utworzyć bazę danych dla X rozmów, która zawiera wszystkie wiadomości z tych rozmów. Pozwala to na dodawanie nowej bazy danych (lub serwera) za każdym razem, gdy x przekracza. X to liczba rozmów, które obsługuje twoja infrastruktura (w zależności od sprzętu,...).
Problem nadal polega na tym, że w tej samej bazie danych mogą być duże rozmowy (z dużą ilością wiadomości). np. masz bazę danych A i bazę danych b an każdy przechowuje np. 1000 rozmów. Możliwe, że na serwerze A jest znacznie więcej "dużych" rozmów niż na serwerze B (ponieważ jest to treść tworzona przez użytkownika). Możesz dodać bazę danych "master", która zawiera odnośnik, na której bazie danych / serwerze można znaleźć pojedyncze rozmowy (lub masz schemat przypisania bazy danych z hash/modulo lub coś takiego).
Być może uda Ci się znaleźć prawdziwe architektury świata, które borykają się z tymi samymi problemami (może nie jesteś pierwszy), i które już zostały rozwiązane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-15 08:55:21