我该如何管理这个数据库?

时间:2012-03-08 23:22:56

标签: php mysql mongodb redis database

我接受了一个来自客户端的项目,该项目要求我设置后端服务器和API(PHP),以及与iOS应用程序之间的通信。我不能详细介绍该应用程序,但在大多数情况下,它是基于社交的,因此要求我在收到请求后不断更新数据库。

目前,该数据库由三个表组成(第四个表即将发表评论)用户,场地和队列。目前,每当我有一个请求时,我只是从数据库中检索相关数据,但我开始怀疑是否需要开始实现方法来改善数据库的“可扩展性”或使用(类似于memcachd或Redis改进某些东西。这是必要的,因为该应用程序是社交的,可能有一个庞大的用户群?我是否每秒使用一个性能良好的数据库来处理数百个请求,还是应该切换到另一个?

先谢谢了,

最大

P.S随意挑选我的结构,把它放在帖子中只是任何人都有兴趣看看!

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 个答案:

答案 0 :(得分:2)

在需要之前,您可以放弃对缓存方法的担忧。目前,请确保您的数据库已正确规范化。一旦网站运行顺利并开始普及,在memcached中挂钩将是一项相对简单的任务。

我注意到一个队列可能属于一个用户,该用户与拥有队列位置的用户不同:Queues.userIDVenues.userID来自Queues.venueID。如果这不是您想要的,那么您将要删除Queues.userID,因为可以获取用户信息来检查队列的位置。

此外,如果Users.Number_of_Venues是具有特定Venues的{​​{1}}数量的计数,请将其删除,因为没有理由存储它,因为可以快速获取该信息userID。离开它意味着缺乏正常化。

设置好架构后,请记住properly index。这将有助于加快您的查询速度。