我接手了一个客户项目,该项目要求我设置一个后端服务器和 API (PHP),以便与 iOS 应用程序进行通信。我无法详细介绍该应用程序,但在大多数情况下,它是基于社交的,因此要求我在收到请求后不断更新数据库。
目前,该数据库由三个表组成(第四个表即将征求意见):用户、 field 和队列。目前,每当我有请求时,我只是从数据库中检索相关数据,但我开始怀疑是否需要开始实现方法来提高数据库的“可扩展性”或使用(类似于) 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 ;
最佳答案
您可以推迟担心缓存方法,直到需要时为止。目前,请确保您的数据库已正确规范化。一旦网站运行顺利并开始流行, Hook memcached 将是一项相对简单的任务。
我注意到队列可能属于与拥有队列 field 的用户不同的用户:通过 Queues 的
。如果这不是您想要的,那么您需要删除Queues.userID
和 Venues.userID
。地点IDQueues.userID
,因为可以通过检查队列的地点来获取用户信息。
此外,如果 Users.Number_of_Venues
是具有特定 userID
的 Venues
数量计数,请将其删除,因为没有理由存储它,因为可以通过快速 COUNT(*)
获取该信息。离开它就意味着缺乏正常化。
设置架构后,请记住 properly index 。这将是加快查询速度的救星。
关于php - 我应该如何管理这个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9626655/