Tworzę 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 zwanej „wiadomościami”. Zdaję sobie sprawę, że ta tabela może się rozrosnąć, ponieważ nawet małe wiadomości, takie jak „Cześć”, miałyby swój własny rekord bazy danych.
Czy ktoś może polecić bardziej skalowalne rozwiązanie mysql? Nie wymagam, aby poszczególne wiadomości można było przeszukiwać, edytować lub usuwać. Czy cała rozmowa mogłaby być przechowywana w jednym ogromnym polu?
Chciałbym usłyszeć Twoje pomysły!
mysql
scalability
chat
wilsonpage
źródło
źródło
Odpowiedzi:
Nie ma nic złego w zapisywaniu całej historii w bazie danych, są przygotowani do tego typu zadań.
Właściwie możesz znaleźć tutaj w Stack Overflow link do przykładowego schematu czatu: przykład
Jeśli nadal martwisz się rozmiarem, możesz zastosować pewne optymalizacje do wiadomości grupowych, takie jak dodanie bufora do aplikacji, który wsuwasz dopiero po pewnym czasie (np. 1 minuta); w ten sposób unikniesz posiadania tylko jednej wiadomości liniowej
źródło
Jeśli możesz uniknąć konieczności jednoczesnego zapisywania w jednym pliku, wygląda na to, że nie potrzebujesz bazy danych do przechowywania wiadomości czatu.
Wystarczy dołączyć konwersację do pliku tekstowego (1 plik na użytkownika \ konwersację). i mają strukturę katalogów / plików
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łoby tylko zapisać identyfikator użytkownika, identyfikator konwersacji (guid?) I odniesienie do nazwy pliku.
Myślę, że trudno będzie Ci uzyskać 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.htmlJeśli chcesz odbudować konwersację, będziesz musiał 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 jest to dobry pomysł rozważyć użycie bazy danych.
źródło
Możesz utworzyć bazę danych dla x rozmów, która zawiera wszystkie wiadomości z tych rozmów. Umożliwiłoby to dodanie nowej bazy danych (lub serwera) za każdym razem, gdy x przekracza. X to liczba rozmów obsługiwanych przez twoją infrastrukturę (w zależności od sprzętu, ...).
Problem w dalszym ciągu 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 i każda z nich przechowuje np. 1000 rozmów. Możliwe, że na serwerze A jest znacznie więcej „dużych” konwersacji niż na serwerze B (ponieważ jest to treść tworzona przez użytkowników). Możesz dodać "główną" bazę danych, która zawiera wyszukiwanie, w której bazie danych / serwerze można znaleźć pojedyncze konwersacje (lub masz schemat przypisywania bazy danych z hash / modulo lub coś w tym rodzaju).
Może znajdziesz architektury świata rzeczywistego, które zajmują się tymi samymi problemami (możesz nie być pierwszy) i które zostały już rozwiązane.
źródło