Spec-Zone .ru
спецификации, руководства, описания, API
|
Следующие направляющие линии покрывают аспекты разрабатывания приложений MySQL, которые не могли бы быть сразу очевидными для разработчиков, происходящих из среды Python:
Для безопасности не делайте hardcode, который значения должны были соединить и
зарегистрировать в базу данных в Вашем основном сценарии. У Python есть соглашение a config.py
модуль, где можно разделить такие значения от остальной части
Вашего кода.
Сценарии Python часто растут и разъединяют большие структуры данных в памяти до
пределов доступной RAM. Поскольку MySQL часто имеет дело с наборами данных, которые много раз больше чем
доступная память, методы, которые оптимизируют пространство памяти и дисковый ввод-вывод, особенно
важны. Например, в таблицах MySQL, Вы обычно используете числовые ID, а не основанные на операция со
строками ключи словаря, так, чтобы значения ключа были компактны и имели предсказуемую длину. Это
особенно важно для столбцов, которые составляют первичный ключ для InnoDB
таблица, потому что те значения столбцов дублируются в пределах
каждого вторичного
устройства, индексирует.
Любое приложение, которое принимает ввод, должно ожидать обрабатывать неправильных данных.
Неправильные данные могли бы быть случайными, такими как значения из диапазона или строки misformatted. Приложение может использовать серверные проверки, такие как ограничения на уникальность данных и ограничения NOT NULL, чтобы сохранить неправильных данных от когда-либо достижения базы данных. На стороне клиента используйте методы, такие как обработчики исключений, чтобы сообщить о любых проблемах и принять меры по ликвидации последствий.
Неправильные данные могли бы также быть преднамеренными, представляя "атаку" инжекции SQL. Например, входные значения могли бы содержать кавычки, точки с запятой, %
и _
подстановочные символы и другие символы, существенные в SQL-операторах. Проверьте входных значений, чтобы удостовериться, что у них есть только ожидаемые символы. Выйдите из любых специальных символов, которые могли изменить намеченное поведение когда заменено в SQL-оператор. Никогда не связывайте значение ввода данных пользователем в SQL-оператор, не делая проверку допустимости и выходя сначала. Даже когда ввод принятия, сгенерированный некоторой другой программой, ожидайте, что другая программа, возможно, также поставилась под угрозу и отправлять Вам неправильные или злонамеренные данные.
Поскольку наборы результатов от SQL-запросов могут быть очень большими, используйте соответствующий метод, чтобы получить элементы от набора результатов, поскольку Вы циклично выполняетесь через них. fetchone () получает единственный элемент, когда Вы знаете, что набор результатов содержит единственную строку. fetchall () получает все элементы, когда Вы знаете, что набор результатов содержит ограниченное количество строк, которые могут соответствовать удобно памяти. fetchmany () является методом общего назначения, когда невозможно предсказать размер набора результатов: Вы продолжаете вызывать это и цикличное выполнение через возвращенные элементы, пока нет больше результатов обработать.
Так как у Python уже есть удобные модули такой как pickle
и cPickle
чтобы считать и записать
структуры данных на диске, у данных, которые Вы хотите хранить в MySQL вместо этого, вероятно, будут
специальные характеристики:
Слишком большой ко всем умещаются в памяти
когда-то. Вы используете SELECT
операторы, чтобы запросить только точные элементы Вы
нуждаетесь, и агрегатные функции,
чтобы выполнить вычисления через многократные элементы. Вы конфигурируете innodb_buffer_pool_size
опция в пределах сервера MySQL,
чтобы выделить определенное количество RAM для того, чтобы кэшировать результаты запроса.
Слишком сложный, чтобы быть представленным единственной структурой данных. Вы делите данные между различными таблицами SQL. Можно повторно объединить данные от многократных таблиц при использовании запроса соединения. Вы удостоверяетесь, что связанные данные сохраняются в синхронизации между различными таблицами, устанавливая отношения внешнего ключа.
Обновляемый часто, возможно многочисленными
пользователями одновременно. Обновления могли бы только влиять на небольшую
часть данных, делая это расточительный, чтобы записать целой структуре каждый раз. Вы
используете SQL INSERT
, UPDATE
, и DELETE
операторы, чтобы обновить различные элементы
одновременно, пишущий только измененные значения в диск. Вы используете InnoDB
таблицы и транзакции,
чтобы препятствовать операциям записи конфликтовать друг с другом, и возвращать
непротиворечивый запрос заканчиваются, как раз когда базовые данные обновляются.
Используя MySQL лучшие методы для производительности могут помочь Вашему приложению масштабироваться, не требуя главных перезаписей и архитектурных изменений. См. Главу 8, Оптимизацию для лучших методов для производительности MySQL. Это предлагает направляющие линии и подсказки для настройки SQL, проектирования баз данных, и конфигурации сервера.
Можно избежать повторно изобретать колесо, изучая SQL-операторы MySQL для общих
операций: операторы, чтобы использовать в запросах, методах для объемных данных загрузки, и так далее.
Некоторые операторы и пункты являются расширениями основных, определенных стандартом SQL. См. Раздел 13.2, "Операторы Манипулирования данными",
Раздел 13.1, "Операторы Определения данных", и
Раздел 13.2.9,"SELECT
Синтаксис" для основных классов операторов.
Издание SQL-операторов от Python обычно включает объявление очень долго, возможно многострочные строковые литералы. Поскольку строковые литералы в пределах SQL-операторов могли быть включены единственной цитатой, двойные кавычки, или содержать любой из тех символов для простоты, можно использовать тройным образом заключающий в кавычки механизм Python, чтобы включить весь оператор. Например:
'''It doesn't matter if this string contains 'single'or "double" quotes, as long as there aren't 3 in arow.'''
Можно использовать любой из '
или "
символы для тройным образом заключающих в кавычки многострочных строковых литералов.
Многие из секретов к быстрому, масштабируемому приложению MySQL включают
использование правильного синтаксиса в, очень запускаются Вашей процедуры установки, в CREATE TABLE
операторы. Например, Oracle рекомендует ENGINE=INNODB
пункт для большинства таблиц, и делает InnoDB
механизм хранения значения по умолчанию в MySQL 5.5 и. Используя
InnoDB
таблицы включают транзакционному поведению, которое помогает
масштабируемости рабочих нагрузок чтения-записи и предлагает автоматическое восстановление
катастрофического отказа. Другая рекомендация состоит в том, чтобы объявить числовой первичный ключ для
каждой таблицы, которая предлагает самый быстрый способ искать значения и может действовать как
указатель на присваиваемые значения в других таблицах (внешний ключ). Также в
пределах CREATE TABLE
оператор, используя самые компактные типы данных
столбца, которые встречают Ваши основные эксплуатационные характеристики, помогает производительности и
масштабируемости, потому что это позволяет серверу базы данных переместить меньше данных назад и вперед
между памятью и диском.