PHP / MySQL: правильный способ создания большой базы данных сайта на основе - PullRequest
1 голос
/ 23 апреля 2009

Я создаю веб-сайт с фильмами, например, IMDB.com .. Я действительно новичок в PHP и программировании, но у меня есть несколько книг и, конечно, StackOverflow:)

Я уже проделал большую работу, но теперь у меня есть более 600 строк кода (только PHO) на страницу и более 20 таблиц базы данных только для хранения и получения данных фильма (отношения многие ко многим)

Большая часть кода представляет собой MySQLi-запросы (подготовленные операторы) для вставки / получения данных и циклов. Ничего особенного, просто базовый PHP / MySQL.

У меня есть несколько вопросов:

  • Рекомендуется использовать подготовленные операторы MySQLi для каждого запроса SQL или лучше просто использовать старый MySQL для внутренних запросов PHP / базы данных и оставить подготовленные операторы только для ввода пользователя?

  • Чтобы получить все данные фильма и показать его, мне нужно получить данные из более чем 16 различных таблиц. Я использую один запрос MySQL на таблицу (иногда больше) и много циклов. Это правильный способ работы веб-сайта? Я имею в виду .. это нормально ???

  • Как мне упростить код, чтобы упростить чтение? Могу ли я разделить все эти запросы на внешние файлы? Могу ли я создать функции для обработки каждого запроса таблицы?

Надеюсь, вы поможете мне, и, может быть, у вас есть еще несколько советов, как правильно создать такой сайт.

Спасибо !!

Ответы [ 5 ]

3 голосов
/ 23 апреля 2009

Как уже упоминалось выше, я также хотел бы указать на использование инфраструктуры, которая влияет на шаблон проектирования MVC. Наряду с этим большинство фреймворков имеют встроенный ORM, но если они этого не делают, вы можете взглянуть на Symphony или EZPDO - это еще один хороший ORM для привязки к вашей модели в (M) VC.

CodeIgniter - это очень быстрая и легковесная инфраструктура MVC, которая позволяет довольно быстро загружаться, но вы также можете захотеть взглянуть на ZF (ZendFramework). ZF обладает отличным набором функций и в целом довольно гибок.

Помимо этого, обязательно разделяйте ваши операции чтения и записи в или в Model, или в своих вызовах в ORM по вашему выбору. Это позволит вам подчинять данные нескольким MySQL Box для большей производительности, но позволяет вам использовать один механизм базы данных для запуска.

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

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

memcached: http://www.danga.com/memcached/'

-facebook также имеет версию

CodeIgniter - http://codeigniter.com/

EZPDO - http://www.ezpdo.net/blog/?p=2

ZendFramework - http://framework.zend.com/

1 голос
/ 24 апреля 2009

К этому вопросу:

"Чтобы получить все данные фильма и показать его Мне нужно получить данные из более чем 16 разных столов. Я использую один MySQL запрос на таблицу (иногда больше) и много петель. Это правильный путь сайт должен работать ?? Я имею в виду .. это нормально ??? "

Нет. Если я вас правильно понимаю, вам следует использовать какой-либо тип JOIN в зависимости от данных, которые вы получаете из базы данных. Получать результаты для огромных объемов данных, а затем выбирать только те фрагменты, которые вам нужны в PHP, гораздо медленнее, чем позволить базе данных выполнять работу по сортировке / извлечению только тех записей / информации, которые вы хотите показать.

Я настоятельно рекомендую несколько устаревшую, но очень простую в освоении книгу, которая охватывает PHP и MySQL / Базы данных в целом: http://www.dmcinsights.com/phpmysql2/ - Она охватывает множество «практических» методов наряду с кодом, так что было бы здорово учиться.

По-видимому, существует третье издание с обновленной информацией, но я на него не смотрел.

1 голос
/ 23 апреля 2009
  1. Подготовленные операторы подходят для ваших внутренних запросов. У вас будет строгий подход ко всем запросам.

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

  3. Как прокомментировал Питер Д., я бы порекомендовал использовать веб-фреймворк, чтобы научиться отделять обработку базы данных от представления. Вы используете объектно-ориентированный подход сейчас? Посмотрите на шаблон MVC, который реализован в некоторых из этих фреймворков.

1 голос
/ 23 апреля 2009

Как упомянул Питер Д. перед тем, как добавить это в список используемых фреймворков. Zend Framework http://framework.zend.com С открытым исходным кодом и бесплатно.

  1. Рекомендуется использовать MySQLi ...

Определенно MySQLi, но это большой вопрос сам по себе, если вы начнете кодировать, вам нужно будет понять основы T-SQL, чтобы понять разницу.

  1. Чтобы получить все данные фильма ...

Это зависит от многих вещей. Размер базы данных. Требуемые результаты, то есть информация, которая должна отображаться, время отклика запросов и отображение в представлении пользователя. Вы знаете о JOIN, UNION?

  1. Как мне упростить код до ...

Да на все вопросы. www.w3schools.com/php/, если это может помочь, и выучите шаблон MVC. Полезно для многих языков программирования в эти дни. Может быть, рамки помогут вам здесь

1 голос
/ 23 апреля 2009

Рассмотрите возможность просмотра или использования веб-фреймворка для вашего сайта.

Symfony CakePHP CodeIgniter

Являются одними из наиболее распространенных. Учитесь у них, если что.

...