2012-03-08 2 views
2

iOS 응용 프로그램과의 통신을 통해 백엔드 서버 및 API (PHP)를 설정해야하는 클라이언트에서 프로젝트를 가져 왔습니다. 앱에 대해 너무 자세하게 설명 할 수는 없지만 대부분 사회적으로 기반을두고 있으므로 요청을 받으면 데이터베이스를 지속적으로 업데이트해야합니다.이 데이터베이스는 어떻게 관리해야합니까?

현재 데이터베이스는 사용자, 장소 및 대기열의 세 가지 테이블로 구성됩니다. 현재 요청이있을 때마다 데이터베이스에서 관련 데이터를 검색하지만 데이터베이스 또는 확장 성의 '확장 성'을 향상시키는 방법을 구현해야하는지 궁금해하기 시작합니다.) 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을 기억하십시오. 그것은 쿼리 속도를 향상시키는 생명을 구할 것입니다.

관련 문제