MySql хорош для больших баз данных? - PullRequest
11 голосов
/ 27 апреля 2011

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

Управляя такими вещами, как скорость соединения и тип браузера, становится ясно, что проблема заключается в самом веб-сайте.Итак, я думаю о том, чтобы переделать сайт и затем предложить его контент-провайдеру в качестве средства загрузки своих данных.По сути, этот проект требует очень большой базы данных для хранения сотен тысяч имен, адресов и других типов данных.

Мой единственный опыт работы с базами данных - это MySql, и действительно мой единственный опыт работы с динамическим контентом - это PHP.Итак, да, я пытаюсь выяснить, подходит ли старая комбинация PHP + MySQL для хранения и представления больших объемов данных.Я делал это только на небольших проектах, но я думаю, что все шаблоны HTML с заполнителями для динамического контента будут работать нормально.

Конечно, я действительно не знаю, почему этот сайт такой медленный.Может быть, это не БД вообще.Может быть, это сервер или что-то еще.Но главное, что я пытаюсь сделать, - это повысить скорость и функциональность этого сайта.У меня нет опыта работы с другими типами баз данных, поэтому любые советы / рекомендации, которые вы можете предложить по выполнению такого проекта, будут с благодарностью.Кроме того, любые советы относительно того, как вообще сделать быстрый и функциональный сайт, который должен был бы представлять динамические данные из чрезвычайно большой базы данных, также были бы полезны.

* Редактировать: я изучаю Python, так что если вы думаете, чтобудь лучшим языком побочных сценариев, тогда я, конечно, могу попытаться реализовать что-то отличное от первоначального плана выше.

Ответы [ 8 ]

15 голосов
/ 27 апреля 2011

Если вы делаете хороший дизайн, у вас могут быть очень большие базы данных в MySQL ( этот другой вопрос может вам помочь ).Правильно определите ключи и индексы , , оптимизируйте ваши запросы (EXPLAIN ваш друг здесь).Выберите хороший движок базы данных .

Есть много вещей, которые нужно сделать, чтобы получить максимум от MySQL.

РЕДАКТИРОВАТЬ: еще несколько идей ...

Это также довольноважно то, как вы структурируете свои данные и таблицы, чтобы их было легко писать, восстанавливать или находить компромисс между ними (в зависимости от варианта использования).

Кроме того, если он растет, вы можете использовать кластер , разделить ваши данные между несколькими базами данных MySQL на нескольких машинах (например, используя схему Master-slave) - это еще один вариант.

Чтобы повысить производительность, вы также должны подумать об использовании некоторого кэша для повторяющихся запросов.

Существуют также такие инструменты, как Vitess , которые помогают масштабировать MySQLбазы данных аналогично базам данных NoSQL.

12 голосов
/ 27 апреля 2011

Если PHP / MySQL может масштабироваться до использования Facebook , он может масштабироваться до вашего.Это не обязательно лучшее решение для всех ситуаций, и при этом масштабирование не всегда простая задача.

3 голосов
/ 27 апреля 2011

Да, вы можете создавать масштабные приложения, используя PHP и MySQL. Вам также необходимо использовать некоторые другие вспомогательные инструменты, которые помогут масштабировать ваше приложение, например, балансировщики нагрузки.

Теперь дело в том, что вы не можете сделать это с установкой по умолчанию самого MySQL. Вы должны понимать, как сбалансировать нагрузки на несколько серверов. А потом, как использовать кластеры или осколки. Таким образом, вы можете делать все, пока ваша система разработана на основе масштабируемой архитектуры.

И не начинайте беспокоиться о миллионах записей, когда вы просто развертываете свою первую версию. Масштабирование происходит постепенно. Вы не можете развернуть приложение, которое масштабируется всего за один день. Вы должны оптимизировать его изо дня в день. Вспомните цитату Дональда Кнута «Преждевременная оптимизация - корень всего зла»

Сайт, подобный HighScalability, может помочь вам понять, как проектировать лучшие архитектуры поверх стека LAMP:)

= Н =

3 голосов
/ 27 апреля 2011

Вы действительно начинаете достигать предела mysql в миллионах (и все еще можете продвинуть его дальше, если это действительно необходимо). Вы можете взглянуть на побочные эффекты mysql или, если вы используете миллиарды, взглянуть на что-то вроде Кассандры.

Производительность мудрая, php не постится, но должен быть достаточно быстрым. Попробуйте использовать фоновые задачи / задания cron для трудоемких заданий и большого объема кэширования.

0 голосов
/ 27 апреля 2011

Есть несколько пунктов, чтобы поднять ваш вопрос.

Первое, что я заметил, это то, что вы упомянули о хранении «сотен тысяч» строк. Это не очень большое. Мой сервер 386 с оперативной памятью 512M может обрабатывать такое количество строк с небольшой задержкой. Если вы правильно спроектируете свою базу данных, то ваша реальная проблема будет связана с пропускной способностью (запросов в секунду), которая будет поступать на ваш сервер.

MySQL может масштабироваться, но у него это плохо получается. Facebook использует PHP / MySQL для некоторых своих сервисов, но для более быстрых и ресурсоемких задач они используют hadoop. Они также используют PHP, но для более быстрых приложений они используют хип-хоп, чтобы преобразовать его в c ++ и скомпилировать его.

MySQL может масштабироваться, но если вы не настроите его правильно, он потерпит неудачу, когда таблицы станут слишком большими. PostgreSQL лучше масштабируется из коробки, но при правильной настройке работает нормально.

Похоже, что ваше приложение больше, чем вы привыкли, но на самом деле не "такое" большое. Я бы больше беспокоился о времени отклика, чем о масштабировании базы данных в вашей конкретной ситуации.

0 голосов
/ 27 апреля 2011

Конечно, PHP и MySQL могут обрабатывать много данных, если вы хорошо структурированы (хорошо нормализованы), вам не о чем беспокоиться.

MySQL используется для очень очень больших проектов, некоторые из них:

  • YouTube
  • facebook
  • 1010 * Друпал *
  • 1012 * WordPress *
0 голосов
/ 27 апреля 2011

MySQL может справиться со многими задачами, вам просто нужно убедиться, что вы используете правильный движок базы данных, который соответствует вашим потребностям. Я использую InnoDB по большей части из соображений производительности, но вы можете использовать все, что не MyISAM.

0 голосов
/ 27 апреля 2011

Лично я использовал MySQL в качестве крупномасштабной базы данных, смешанной с основанным на PHP веб-сайтом отчетности. У нас есть хорошая пара из нескольких тысяч строк с более чем 20 столбцами данных, которые приходят и уходят каждый день с постоянными множественными подключениями к серверу. MySQL должен легко выполнять большинство тех же функций, что и обычные MSSQL, PostgreSQL, Oracle и т. Д. ... Ключ к вашим запросам. Чтобы убедиться, что они наилучшие, вы можете написать их, чтобы уменьшить нагрузку на сам сервер. Удачи в вашем проекте!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...