我接受了一个来自客户端的项目,该项目要求我设置后端服务器和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 ;
答案 0 :(得分:2)
在需要之前,您可以放弃对缓存方法的担忧。目前,请确保您的数据库已正确规范化。一旦网站运行顺利并开始普及,在memcached中挂钩将是一项相对简单的任务。
我注意到一个队列可能属于一个用户,该用户与拥有队列位置的用户不同:Queues.userID
和Venues.userID
来自Queues.venueID
。如果这不是您想要的,那么您将要删除Queues.userID
,因为可以获取用户信息来检查队列的位置。
此外,如果Users.Number_of_Venues
是具有特定Venues
的{{1}}数量的计数,请将其删除,因为没有理由存储它,因为可以快速获取该信息userID
。离开它意味着缺乏正常化。
设置好架构后,请记住properly index。这将有助于加快您的查询速度。