Я собираюсь внедрить функцию на своем веб-сайте, которая рекомендует контент для пользователей на основе содержимого, которое у них уже есть в своей библиотеке (a la Last.fm). В одной таблице хранятся все записи добавляемого контента, поэтому строка может выглядеть примерно так:
-------------------- | userid | content | -------------------- | 28 | a | --------------------
Когда я хочу рекомендовать некоторый контент для пользователя, я использую запрос, чтобы получить все идентификаторы пользователя, у которых есть контент, добавленный в их библиотеке. Затем из этих идентификаторов пользователя я делаю еще один запрос, который находит следующий наиболее распространенный контент среди этих пользователей (fx. 'B') и показывает это пользователю.
Моя проблема в том, когда я думаю о большой картине здесь. Скажите, что в конечном итоге мой сайт проведет что-то вроде 500 000 строк в таблице, это заставит MySQL очень медленно или я недооцениваю MySQL здесь?
Вы не узнаете об этом, пока не протестируете его, поэтому начните прототипирование.
Как правило, 500 000 рядов почти ничего. Я немного беспокоюсь, когда мои таблицы достигают 50 миллионов, потому что это требует времени, когда я должен очистить старые данные, хотя запросы данных все еще бывают быстрыми.
Но все это зависит от типа запросов, которые вам нужны. Запросы, охватывающие все эти 50 миллионов строк, действительно будут очень медленными, запросы, затрагивающие 50 000 из этих 50 миллионов, бывают быстрыми. И для вашей проблемы вам нужно измерить свои запросы, настроить свои запросы, таблицы / индексы и mysql.
500 000 не будет проблемой, если вы создадите правильные индексы для своих запросов. Это зависит также от вашей аппаратной конфигурации от топологии, но в целом это должно быть хорошо.
Реальный вопрос должен быть:
Можно ли предположить, что использование MySQL заглохлось бы, если бы он не смог работать с индексом целого числа на 500 000 строк данных?
Если у вас нет ограничений на оперативную память или процессор или хранилище, он должен работать нормально.
Для этих типов запросов создаются базы данных. Возможно, вам придется настраивать дисковое пространство и оперативную память, если она работает на низком уровне, но с надлежащими индексами вы должны быть в безопасности.
500.000 таблиц элементов не было чем-то примечательным в Foxpro раз – то есть 10 лет назад;) Сегодня это абсолютно ничего. Просто убедитесь, что вы запустили соответствующее оборудование;)
Короче: да, вы недооцениваете MySQL (и, вероятно, большинство коммерчески используемых реляционных баз данных в целом). Если бы они не планировали поддерживать более 500 тыс. Строк, они, вероятно, не были бы одной из самых популярных баз данных в мире.
Я думаю, что nos имеет хороший ответ, потому что он правильно указывает, что вам нужно подчеркнуть свою систему, чтобы узнать ее пределы; но он также предоставляет число (50 миллионов – я не могу ручаться за это, но похоже, что он работал над БД такого размера), по крайней мере, дать вам представление о том, насколько велик блэк-парк.
Итак: 500 тыс.? Выполнимо. 50 миллиардов? Менее уверенно в этом.
Более важным, чем необработанное количество строк, будет правильная индексация, и (тем более), какие запросы вы пишете.
Требование к строкам 500 тыс. Ничего, особенно при индексировании. С другой стороны, если вы пишете трехстороннее самосоединение, требующее полного сканирования таблицы 500 тыс. * 500 тыс. * 500 тыс. Строк, тогда у вас возникнет проблема.