2012-01-30 1 views
2

사용자 친구 목록이 필요한 기능이 포함 된 내 웹 사이트 용 Facebook 응용 프로그램을 만드는 중입니다.큰 세션을 저장하면 응답 시간과 서버 속도가 느려지 는가

친구를 검색하는 것은 문제가되지 않으며, 내가 결정하기 위해 고심하고있는 것은 그들을 저장하는 방법입니다.

  1. 는 옵션 1- 스토어는 내 MySQL 데이터베이스의 사용자가, 나는 내 데이터베이스가 매우 무거운, 아주 빨리 될 것 같은이 갈하지 않는 것을 선택했다. 또한 Facebook 사용자별로 테이블을 만들어야합니다.
  2. 옵션 2 - 새로운 친구가 포함되도록 매 30 분마다 업데이트되는 세션에 Facebook 친구 배열을 저장하십시오. 세션이 매 30 분마다 업데이트된다는 사실을 무시하십시오.은 세션 내에 매우 큰 배열이 될 수있는 것을 저장하는 것은 나쁜 생각입니까?

웹 사이트는 많은 양의 트래픽을 수신 할 가능성이 있으므로 이러한 세션을 많이 저장할 것입니다.

나는 경험 많은 개발자이지만 이러한 상황에서 세션에 지나치게 경험하지는 않습니다. 나는 이것이 단순히 나쁜 생각인지 아닌지 알고 싶을뿐입니다.

  1. 각 배열의 형식은 {0 다차원이다 : 1, 이름 : 조 Bloggs에, 사진 : UID : test.jpg를]

    그냥 당신에게 일반적인 친구 배열에 약간의 정보를 제공합니다 , 1 ...}
  2. 친구 목록은 일반적으로 약 700 개이지만 평균 100 개 항목에서 5000 개 항목까지 다양합니다. 이들은 작지 않습니다!

친구를 저장하는 데 좋지 않은 방법이라면, MySQL을 제외한 다른 옵션에는 어떤 것이 있습니까?

세션이 메모리 (RAM) 사용에 영향을 미칩니 까?

+5

'각 개별 Facebook 사용자를 위해 테이블을 만들어야합니다! '- 그렇게하지 않아도됩니다. 그렇게 생각하면 계획된 데이터베이스 스키마에 결함이있는 것입니다. – DaveRandom

+1

예, 세션은 메모리 사용에 영향을 미칩니다. 실행/읽기가 실행될 때 PHP에서 사용할 수 있기 때문입니다. session_save_handler를 사용하여 데이터베이스에 세션을 저장합니다. (그리고 정말로 무거운 데이터가 세션에 저장되어 있다면 "정상적인"세션 액세스와 테이블을 유지하기 위해 다른 테이블에 데이터를 분할 할 수 있습니다). – djot

+1

데이터베이스로 이동하십시오. 그리고 배열이 무거워지지 않을 것이라고 생각하지 마십시오. 각자의 테이블은 문제가 아닙니다. 그래서 그들이 create query를 발명했습니다.또한, 당신은 필요가 없습니다. meny-to-meny 방식으로 그들을 저장하고 당신은 모두 좋습니다. –

답변

1

요구 사항에 맞게 서버에 MemCacheD를 설치하는 것이 좋습니다. 자세한 내용은 http://memcached.org/을 참조하십시오.

세션은 현재 로그인 한 사용자 만 사용할 수 있으므로 세션간에 정보를 공유하는 것은 어려울 수 있습니다. 또한 세션이 사라지면 사용자 데이터도 사라집니다.

memcached 데이터는 키/값 쌍으로 저장됩니다.

키의 경우 페이스 북 ID와 값으로 직렬화 된 사용자 데이터 개체를 사용할 수 있습니다.

+0

memcached는 '작은 데이터 덩어리'를 의미합니다. 저장하는 배열은 꽤 큽니다! 이게 문제 야? –

+0

개체의 크기가 메가 바이트 정도입니다. 그러나 API에서 얻은 정보 중 일부만 저장하면 이미로드 된 항목에 대한 호출을 낭비 할 필요가 없습니다. user1은 친구 user2, user3, user4를가집니다. 그리고 user5는 친구 user2, user6을가집니다. 따라서 user5 이후에 user5가 앱에 올 때 user2의 정보를 캐시에 저장하기 때문에 API를 쿼리하지 않아도됩니다. 옳은? 이제 각 사용자 개체에 친구 ID를 저장할 수 있습니다 (친구들을위한 완전히 팽창 된 사용자 개체 배열 대신). – DMCS

+0

처음 로그인 할 때 X가 Y와 친구인지 여부를 모르기 때문에 간단하지 않습니다. 또한 memcached는이 데이터를 RAM에 저장합니다.이 데이터는 나중에 서버에서 RAM 소비를 줄이기 위해 역효과를 낼 수 있습니다. 당신이 제안한 것은 매우 유용하지만, 사용자 친구들을 효율적으로 저장하는 것과는 대조적으로 단순히 쿼리 속도를 높이기 때문에 실제로는 적절하지 않다고 생각합니다. –

관련 문제