Как мне управлять этой базой данных? - PullRequest
2 голосов
/ 09 марта 2012

Я взял проект от клиента, который требует от меня настройки внутреннего сервера и API (PHP) для связи с / из iOS-приложения.Я не могу вдаваться в подробности о приложении, но по большей части оно основано на социальных связях и поэтому требует от меня постоянного обновления базы данных при получении запроса.

В настоящее время база данных состоит изтри таблицы (с четвертым в ближайшее время для комментариев) Пользователи, места и очереди.В настоящее время, когда у меня есть запрос, я просто извлекаю соответствующие данные из базы данных, но начинаю задумываться, нужно ли мне начинать реализовывать методы для улучшения «масштабируемости» базы данных или использовать (что-то вроде) memcachd или Redis для улучшения того или иного.Это необходимо, так как приложение является социальным и потенциально может иметь большую базу пользователей?И я использую хорошую высокопроизводительную базу данных для сотен запросов в секунду, или я должен переключиться на другую?

Спасибо заранее,

Макс.

PS Feelсвободно разбирать мою структуру, помещать ее в пост, только если кто-то заинтересован взглянуть!

CREATE TABLE `Queues` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userID` int(11) NOT NULL,
  `Creation_Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `Last_Updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `venueID` int(11) NOT NULL,
  `Wait_Time` int(10) NOT NULL,
  `Line_Length` int(10) NOT NULL,
  `Note` varchar(250) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;


CREATE TABLE `Users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `First_Name` text NOT NULL,
  `Last_Name` text NOT NULL,
  `Username` text NOT NULL,
  `Password` text NOT NULL,
  `Email` text NOT NULL,
  `Signup_Method` text NOT NULL,
  `Signup_Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `Number_of_Lines` int(11) NOT NULL,
  `Number_of_Venues` int(11) NOT NULL,
  `Last_Updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ;


CREATE TABLE `Venues` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userID` int(11) NOT NULL,
  `foursquareID` int(11) NOT NULL,
  `Name` text NOT NULL,
  `Latitude` text NOT NULL,
  `Longitude` text NOT NULL,
  `Address_Line1` text NOT NULL,
  `Address_Line2` text NOT NULL,
  `Post_Code` text NOT NULL,
  `Country` text NOT NULL,
  `Description` text NOT NULL,
  `Created_At` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `Last_Updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

1 Ответ

2 голосов
/ 09 марта 2012

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

Я заметил, что очередь может принадлежать пользователю, который отличается от пользователя, которому принадлежит место в очереди: Queues.userID и Venues.userID через Queues.venueID. Если это не то, что вам нужно, вы можете удалить Queues.userID, поскольку информацию о пользователе можно получить, проверив место в очереди.

Кроме того, если Users.Number_of_Venues является счетом числа Venues с определенным userID, удалите его, так как нет причины хранить его, поскольку эта информация может быть получена быстрым COUNT(*). Уйти это означало бы отсутствие нормализации.

Как только ваша схема настроена, не забудьте правильно индексировать . Это ускорит ваши запросы.

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