2009-08-08 1 views
5

Мой опыт работы с базами данных с довольно небольшими веб-приложениями, но теперь я работаю с набором данных для избирателей для всего штата. Есть около 3,5 млн избирателей, и мне нужно будет немного сообщать о них по их адресу, истории голосования, возрасту и т. Д. Сам веб-приложение будет написано с помощью Django, поэтому у меня есть несколько вариантов базы данных, включая MySQL и PostgreSQL.Является ли MySQL подходящим для чтения-тяжелой базы данных с 3.5m + строк? Если да, то какой двигатель?

В прошлом я почти исключительно использовал MySQL, так как он был так легко доступен. Я понимаю, что 3,5 м строк в таблице на самом деле не так уж и много, но это самый большой набор данных, с которыми я лично работал, поэтому я вышел из своей личной зоны комфорта. Кроме того, этот проект не является быстрым приложением, хотя я хочу, чтобы я выбрал лучшую базу данных для работы, а не только ту, с которой мне больше всего нравится.

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

Спасибо!

ответ

7

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

InnoDB поддерживает лучшую семантику блокировки, поэтому, если будут периодические или частые записи (или если вы хотите улучшить целостность данных), я бы предложил начать с них, а затем провести тестирование myisam позже, если вы не можете поразить целевые показатели производительности ,

+1

+1 - мои чувства точно. Я больше не использую MyISAM, если у меня нет конкретных причин. Это очень способно, я работал с таблицами с 20 миллионами + записей без проблем, но транзакционные возможности InnoDB обычно перевешивают любые различия в производительности, которые вам могут понадобиться, пока вы не столкнетесь с определенными проблемами производительности. – zombat

+0

Спасибо Тиму! Могу ли я попросить вас расширить «точно настроить ваши индексы»? Я получаю назначение индексов, но я не уверен, что такое компромисс - а почему бы и не индексировать все. Я также немного смущен тем, что значит настроить индекс - у меня создалось впечатление, что вы решили индексировать столбец или нет, и все. –

+3

Когда вы создаете индекс, вы добавляете дополнительные накладные расходы при выполнении вставок (немного, немного, но это добавляет). Если вы индексируете все, то это может действительно замедлить работу. Индексы могут быть основаны на одном поле, первом N байтах (или символах) поля или двух или более полей. Вам нужно работать с инструментом «объяснять запрос» и оценивать вашу систему, чтобы выяснить, какой наилучший микс для вашего конкретного набора данных и обычаев, которые вы обычно выполняете. Ознакомьтесь с документами mysql: http://dev.mysql.com/doc/refman/5.0/en/create-index.html для получения дополнительной информации. –

6

MyISAM имеет смысл только в том случае, если вам нужна скорость настолько плохо, что вы готовы принять многие проблемы с целостностью данных, чтобы достичь этого. Вы можете в конечном итоге с database corruption на любое нечистое выключение, есть no foreign keys, no transactions, это действительно ограничено. И так как 3,5 миллиона строк на современном оборудовании представляют собой тривиальный набор данных (если только ваши строки не огромны), вы, конечно, не в такой ситуации, когда вам приходится оптимизировать производительность, а не надежность, потому что нет другого способа повысить производительность цели - это единственная ситуация, когда вам придется мириться с MyISAM.

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

Мне не нравится MySQL, так как существует множество способов получить плохие данные в базе данных, где PostgreSQL не переносит это поведение (см. Comparing Speed and Reliability), плохое поведение MyISAM - это всего лишь часть проблем. Учитывая, как сейчас сломалось сообщество MySQL, и неопределенности в отношении того, что Oracle собирается с ним сделать, вы можете подумать о том, чтобы взглянуть на PostgreSQL, чтобы у вас было еще несколько вариантов в будущем. В последнее время в бесплатном BSD, лицензированном PostgreSQL, гораздо меньше драмы, и в то время как меньше, по крайней мере, для всего сообщества разработчиков, оно продвигается в том же направлении.

+0

Спасибо, Грег, политика MySQL определенно меня немного пугает. Похоже, я должен кое-что прочитать на PostgreSQL и посмотреть, смогу ли я вставить некоторое время в свой график разработки. –

1

Поскольку это таблица для чтения, я рекомендую использовать тип таблицы MyISAM. Если вы не используете внешние ключи, вы можете избежать ошибок, таких как this и that.

Резервное копирование или копирование таблицы на другой сервер так же просто, как копирование файлов frm, MYI и MYD.

0

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

На большом соединении разница может быть огромной.

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

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

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