2010-08-31 3 views
4

У меня есть любопытный вопрос ... Я хотел знать, как поддерживать данные чата в базе данных. Я использую приложение php-mysql, которое хранит данные чата пользователей в базе данных.Как сохранить данные чата?

Теперь мой вопрос в том, что если данные чата увеличиваются, скажем, до нескольких миллионов записей, как их хранить? Поддерживает ли mysql его или имеет какие-либо ограничения или нагрузку?

Возьмите пример чата gmail. Я могу общаться без ограничений, а также получать все мои предыдущие данные чата. Как это возможно ?

Может ли кто-нибудь ответить на этот типичный вопрос о моей?

+1

А как насчет использования механизма хранения 'ARCHIVE'? http://dev.mysql.com/tech-resources/articles/storage-engine.html –

+1

@Imre L: 'ARCHIVE' имеет небольшую проблему: он не поддерживает индексы. В противном случае это было бы идеально. http://dev.mysql.com/doc/refman/5.1/en/archive-storage-engine.html – Piskvor

+0

Спасибо за все ответы ниже ... изначально, что я думал, что я могу хранить огромные данные в mysql, но по мере увеличения данных и записей, поиск будет медленным. Я планирую начать с хранения 20 ГБ, и по мере роста данных пользователей и чатов я буду рассматривать увеличение дискового пространства. Кроме того, я думаю, было бы лучше, если бы я мог периодически удалять данные чата старше 1 или 2 лет, используя работу cron. –

ответ

1

MySQL будет счастливо хранить миллионы, даже миллиарды записей; но некоторых из числовых типов будет недостаточно: see this для максимумов числовых типов. Как вы можете видеть, было бы лучше использовать BIGINT UNSIGNED, например. поля автоинкремента.

Производительность может стать проблемой для больших таблиц, но это может быть в основном решено с помощью индексов (что означает «Я видел снижение производительности где-то около отметки 100 ГБ в аналогичной ситуации»).

+1

Как уже сказал Писквор, пока вы следите за этой документацией и поддерживаете индексы таким образом, чтобы на самом деле помогать базе данных находить записи, вы будете более чем здоровы. Я поддерживаю базу данных MySQL, насчитывающую около 1 миллиона записей, и могу выполнять полнотекстовый поиск в них в доли секунды. Я уверен, что поиск последовательных данных, таких как журналы чата, будет еще быстрее. – Michael

+0

Hi Michael, Как поддерживать индексы таким образом, чтобы на самом деле помогать базе данных находить записи? Я не очень хорошо это понял. Вы имеете в виду индексы на столе? Если да, то как писать индексы в таблице чата? –

+1

@dskanth: индексы, которые вам нужны, зависят от вашей конкретной ситуации; см., например, этот учебник: http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm – Piskvor

-1

У Google есть огромное количество специализированного хранилища, разработанного им для его требований. Я предлагаю вам более конкретно определить ваши требования и определить нужную платформу.

+0

Мои требования таковы, что пользователь должен иметь возможность получать данные своего чата в течение как минимум 1 года. Моя платформа - это php-mysql-apache-windows. –

+0

Сколько пользователей? Каким будет средний объем данных - и как он будет расти - и т. Д. –

+0

Счетчик пользователей будет максимальным 1 лакх, и он не будет расти до этого уровня быстро. Это займет почти 1 год, чтобы стать 1 лакх. И количество данных чата для каждого пользователя может составлять 40 КБ в день. –

5

История чата на самом деле не слишком тяжелая. Если я рассчитываю около 100 байт на сообщение, 6 сообщений в минуту и ​​5 часов в день (хотя это очень разговорчивая болтовня), постоянно, что в худшем случае, что даст около 61 МБ на пользователя в год (!). Это означает, что с 1 миллионом болтливых болтовней (очень unprobable) вам понадобится около 58 ТБ или хранилище данных.

Говоря, что это наихудший расчет, я бы начал с максимальной памяти 1 ТБ, настроил базу данных и посмотрел, как все будет. Очень невыносимо, чтобы очень молодая служба быстро развивалась.

Кроме того, я лично не рекомендовал бы использовать систему Windows для чего-то подобного, если вы не знаете, что вы делаете. MySQL в дистрибутиве Debian будет хранить миллиарды записей и, вероятно, сделает это быстрее из-за меньших ограничений на уровне ОС (подробности см. В документации по MySQL), должен быть раздел об ограничениях для Windows).

Смежные вопросы