2012-03-08 65 views
2

我從一個客戶端項目中獲得了一個項目,這個項目需要我設置一個後端服務器和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 ; 

回答

2

您可以放棄擔心緩存方法,直到需要。目前,請確保您的數據庫已正確歸一化。一旦網站工作順利並開始流行,掛接memcached將是一項相對簡單的任務。

我注意到隊列可能屬於不同於擁有隊列場地的用戶的用戶:Queues.userIDVenues.userID通過Queues.venueID。如果這不是你想要的,那麼你會想刪除Queues.userID,因爲用戶信息可以通過檢查隊列的場地來獲得。

而且,如果Users.Number_of_VenuesVenues數的計數有一定userID,因爲沒有理由保存它作爲信息可以通過快速COUNT(*)獲得將其刪除。離開它意味着缺乏正常化。

一旦您的模式設置,請記住properly index。這將是加速查詢的生命保護程序。

相關問題