WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Следующие рекомендации касаются аспектов разработки приложений MySQL,
которые не могли бы быть немедленно очевидны для разработчиков, происходящих
из среды Python: Для безопасности не кодируйте явно значения для соединения
с базой данных в вашем главном скрипте. Python имеет Скрипты Python часто растут и сносят большие структуры данных в памяти
до пределов доступной RAM. Поскольку MySQL часто имеет дело с наборами
данных, которые во много раз больше, чем доступная память, методы, которые
оптимизируют пространство памяти и дисковый ввод-вывод, особенно важны.
Например, в таблицах MySQL, вы, как правило, используете числовые ID, а не
основанные на операциях со строками ключи словаря, так, чтобы значения ключа
были компактны и имели предсказуемую длину. Это особенно важно для
столбцов, которые составляют
primary key для таблиц Любое приложение, которое принимает ввод, должно ожидать
обрабатывать неправильные данные. Неправильные данные могли бы быть случайными, такими как значения
не из диапазона или неформатированные последовательности.
Приложение может использовать проверки серверной стороны, такие как
unique constraints и
NOT NULL constraints, чтобы удержать неправильные данные от
достижения базы данных когда-либо. На клиентской стороне используйте такие
методы, как обработчики исключений, чтобы сообщить о любых проблемах и
принять меры по ликвидации последствий. Неправильные данные могли бы также быть преднамеренными, представляя
SQL injection. Например, входные значения могли бы
содержать кавычки, точки с запятой, символы подстановки
Поскольку наборы результатов от SQL-запросов могут быть очень
большими, используйте соответствующий метод, чтобы получить элементы набора
результатов, поскольку вы образовываете циклы.
fetchone() получает единственный элемент, когда вы знаете, что набор
результатов содержит единственную строку.
fetchall() получает все элементы, когда вы знаете, что набор результатов
содержит ограниченное количество строк.
fetchmany() является методом общего назначения, когда вы не можете
предсказать размер набора результатов: вы продолжаете вызывать его и
получать возвращенные элементы, пока больше не останется результатов.
Так как у Python уже есть удобные модули, например,
Слишком большие, чтобы поместиться в
памяти когда-то. Вы используете
Слишком сложно, чтобы быть представленным
единственной структурой данных. Вы делите данные между
различными таблицами SQL. Можно повторно объединить данные из многих таблиц
при помощи запроса
join. Вы удостоверяетесь, что связанные данные сохранены в
синхронизации между различными таблицами, настроив отношения
foreign key. Обновляются часто, возможно многочисленными
пользователями одновременно. Обновления могли бы затронуть
только небольшую часть данных, делая расточительным писать целую структуру
каждый раз. Вы используете SQL-запросы
Использование методов наиболее успешной практики MySQL для работы
может помочь вашему приложению масштабироваться не требуя переработки
и изменения архитектуры. Посмотрите
Optimization для методов наиболее успешной практики для
работы MySQL. Это предлагает рекомендации и советы для настройки SQL,
проектирования баз данных и конфигурации сервера. Можно избежать проблем, изучив SQL-операторы MySQL для общих операций:
операторы, чтобы использовать в запросах, методы для оптовых загрузок данных
и так далее. Некоторые запросы это расширения к основным, определенным
стандартом SQL. См.
Data Manipulation Statements,
Data Definition Statements, and
SELECT Statement для главных классов запросов. Выполнение SQL-операторов от Python, как правило, включает объявление
очень длинных, возможно многострочных строковых литералов.
Поскольку строковые литералы в SQL-операторах могут быть заключены в
одиночные кавычки, двойные кавычки или содержать любой из этих знаков для
простоты, можно использовать механизм Python's triple-quoting. Например: Можно использовать любой из символов Многие секреты быстрого и масштабируемого применения MySQL включают
использование правильного синтаксиса в самом начале вашей работы, в запросе
Глава 2. Рекомендации для разработчиков
config.py
, где можно отделить такие значения от остальной части кода.
InnoDB
,
потому что те значения столбцов дублированы в каждом
secondary index.%
и _
и
другие знаки, значительные в SQL-операторах. Проверьте входные значения,
чтобы удостовериться, что у них есть только ожидаемые знаки.
Экранируйте любые специальные символы, которые могут изменить намеченное
поведение, когда подставлены в SQL-оператор. Никогда не связывайте значение
ввода данных пользователем в SQL-оператор, не делая проверки и экранировки.
Даже когда ввод произведен некоторой другой программой, ожидайте, что другая
программа, возможно, также подставилась под угрозу и посылает вам
неправильные или злонамеренные данные.pickle
и
cPickle
, чтобы прочитать и написать структуры
данных на диске, у данных, которые вы принимаете решение хранить в MySQL
вместо этого, вероятно, будут специальные особенности:SELECT
, чтобы запросить только те элементы,
какие нужны, и агрегатные функции, чтобы выполнить вычисления через
много элементов. Вы формируете опцию
innodb_buffer_pool_size
в сервере MySQL, чтобы выделить определенное количество RAM для
кэширования результатов запроса.INSERT
,
UPDATE
и
DELETE
, чтобы обновить различные элементы
одновременно. Вы используете таблицы
InnoDB
и
транзакции, чтобы помешать операциям записи находиться в
противоречии друг с другом и возвращать последовательные результаты запроса,
как раз когда основные данные обновляются.
'''It doesn't matter if this string contains 'single'
or "double" quotes, as long as there
aren't 3 in a row.'''
'
или
"
для многострочных строковых литералов.
CREATE TABLE
.
Например, Oracle рекомендует ENGINE=INNODB
для большинства таблиц и делает InnoDB
механизмом хранения по умолчанию в MySQL 5.5 и выше. Применение таблиц типа
InnoDB
позволяет транзакционное поведение,
которое помогает масштабируемость нагрузки и предлагает автоматическое
восстановление. Другая рекомендация состоит в том,
чтобы объявить числовой
primary key для каждой таблицы, который предлагает самый
быстрый способ искать значения и может действовать как указатель на
присваиваемые значения в других таблицах
(foreign key). Также в
CREATE TABLE
использование самых компактных типов данных, которые удовлетворяют ваши
требования к приложению, помогает работе и масштабируемости, потому что это
позволяет серверу базы данных переместить меньше данных
между памятью и диском.
Найди своих коллег! |
Вы можете направить письмо администратору этой странички, Алексею Паутову.