我从一个客户那里接受了一个项目,该项目要求我设置一个后端服务器和API(PHP),并与iOS App进行通信。我无法详细介绍该应用程序,但在大多数情况下,它是基于社交的,因此要求我在收到请求后不断更新数据库。
当前,该数据库包含三个表(用户即将在第四个表中发表评论)Users,Venues和Queues。此刻,每当有请求时,我都只是从数据库中检索相关数据,但是我开始怀疑是否需要开始实现一些方法来提高数据库的“可扩展性”或使用这些方法(类似于)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 ;
最佳答案
您可以不必担心缓存方法,直到需要时才考虑。暂时确保数据库已正确规范化。一旦站点运行正常并开始流行,挂接memcached将是一个相对琐碎的任务。
我注意到队列可能属于与拥有队列地点的用户不同的用户:Queues.userID
和Venues.userID
通过Queues.venueID
。如果这不是您想要的,那么您将要删除Queues.userID
,因为可以通过检查队列的位置来获取用户信息。
另外,如果Users.Number_of_Venues
是具有特定Venues
的userID
的数量的计数,请删除它,因为没有理由存储它,因为可以通过快速COUNT(*)
获得信息。离开它意味着缺乏规范化。
设置好架构后,请记住使用properly index。这将节省您的查询速度。