1

페이스 북에서 어떻게하는지, 너무 빨리하는 것과 같은 사용자 활동 로그를 작성하는 올바른 방법은 무엇입니까? 나는 활동을 사용자의 활동을 기록하고 그/그녀의 친구/가족/추종자들에게 보여줄 수있는 클라이언트를위한 웹 사이트를 가지고 있지만 매우 느린데, 우리는 사용자 대화 형 기능을 개선하고 도움을 줄 수 있다면 데이터베이스를 변경할 의향이 있습니다. 로그 올바른 방법. 이미 많은 사람들이 이미 그것에 대해 연구하고 있지만, 어떤 방법 으로든 제대로 된 방법을 보여 주므로 링크를 찾을 수 없으므로이를 구현할 수도 있습니다. 어떤 도움?사용자 작업을위한 데이터베이스 구조가 올바르게 완료 되었습니까?

활동의 원하는 출력

enter image description here

+0

현재 구조는 무엇입니까? 그 사실을 아는 것은 사람들이 그것을 개선 할 수있는 방법을 제안하는 데 도움이 될 것입니다. 어떤 종류의 기계 하드웨어, 얼마나 많은 사용자, 현재 응답 시간, 원하는 응답 시간, 요법. 그렇지 않으면 질문이 너무 애매하게 끝납니다. – dmcnelis

+0

잘 나는이 것을 위해 가장 좋은 테이블 구조가 무엇인지 알고 싶다. 그리고 정말로, 말하기 쉬운 방법은 페이스 북이다. 누구나 페이스 북에서 어떻게 활동하는지 알며, 단지 테이블 구조를 사용하여 어떻게 설정해야 하는지를 알고 싶을뿐입니다. – Basit

+0

많은 사람들이 요즘 휠을 다시 발명합니다. 네, 물론 끝났습니다. "데이터베이스"가 부족하다면, 확실히 작동해야합니다. DDL을 게시하십시오. – PerformanceDBA

답변

1

음, 페이스 북의 아키텍처는 확장 성이 뛰어나며, 그들은 데이터 요청에 "정문"및 데이터를 경색 그 뒤에 진짜 근육을 많이 가지고 효과적으로.

첫 번째 질문은이 앱이 처리해야하는 동시 사용자 수입니다. < 100이면 데이터 계층의 색인이 잘되어 있고 "스마트"쿼리 (색인 된 기준을 사용하여 페이지를 표시하는 데 필요한 데이터를 정확히 가져오고 더 이상 없어도 됨)를 만들고 있는지 확인하십시오. 쿼리에 대해 반환 할 데이터가 많으면 질의 (SELECT TOP 25 ... FROM Activity WHERE Activity.Date < <date of the last record of the last page you retrieved>)가 수백 개가되지 않습니다. 실시간이 아닌 작업이나 덜 자주 사용되는 작업을 분리하기 위해 복제 서버를 고려하거나 단순히로드 균형 조정을 고려하십시오. 수백 명, 분산 테이블 및 대량 트랜잭션 운송으로 서버 클러스터를 생각해보십시오. 그 이상으로 기업 아키텍처에 대한 내 전문성을 넘어서게됩니다. 어떤 경우에

첫 번째 단계 :

  • 이 DB 프로필. 사용자가 취할 수있는 각 작업에 의해 생성 된 쿼리를보고 해당 쿼리가 작업을 수행하는 가장 효율적인 방법인지 여부를 비판적으로 살펴보십시오. 커서 기반 작업 리팩터링 SQL 엔진이 많은 수의 근육을 단락시킬 수 있기 때문에 신속하게 실행될 것으로 예상되는 모든 작업에서 이러한 작업을 원하지는 않습니다.
  • 특히 평등과 함께 결과를 필터링/검색하고 클러스터 된 기본 키를 만드는 데 자주 사용되는 기준을 식별합니다. 클러스터 된 키를 사용하면 서버가 동일한 조건의 데이터를 동일한 데이터 페이지에 정렬하여 블록에서 검색 할 가능성이있는 데이터를 더 빨리 검색 할 수 있습니다. 그래도 조심해. 인덱스가 너무 많으면 성능이 저하됩니다.
  • 쿼리가 잘 보이고 잘 인덱싱 된 스키마에 대해 실행되었지만 여전히 느린 경우 쿼리를 테이블 반환 함수 또는 저장 프로 시저로 리팩터링하는 것이 좋습니다. 그것들은 미리 컴파일되어 있고, 쿼리 계획이 미리 설계되어있어 일반적인 DB 호출에 오버 헤드가 발생하지 않습니다. 또한 네트워크를 통해 전송되는 정보가 더 적습니다.
  • 웹 서버 측의 세션 저장소 또는 다른 메모리 내 저장소에서보다 비싼 쿼리 중 일부, 특히 여러 페이지에서 공유되는 데이터 및/또는 데이터가 빠르게 변경되지 않도록 캐시합니다. 웹 서버에서 많은 메모리를 사용할 수 있어야합니다.
  • 아직 충분하지 않습니까? 더 많은 하드웨어 근육을 DB 서버 컴퓨터에 던집니다.
  • 분산 모델을 고려하십시오. 대부분의 주요 DBMS는 클러스터 환경에서 작동 할 수 있습니다. 모델을 구조화하는 방법은 스키마와 수행 된 작업에 따라 다릅니다. 지리적 영역별로 데이터를 분리하는 것이 Facebook과 같은 거대 기업의 경우에도 효과적입니다.
  • 이 모든 작업을 수행하는 동안 AJAX와 같은 비동기 기술을 통합하여 UI를보다 신속하게 만들 수 있습니다. DB 서버가 계속 흔들리는 동안 페이지의 프레임이로드되고 브라우저에 표시 될 수 있습니다. 그런 다음 데이터는 비동기 적으로 추적되어 지연된 방식으로 페이지에 렌더링 될 수 있습니다.
+0

활동 표에 대한 테이블 구조를 제안 할 수 있습니까? 그래서 나는 그것을 페이스 북 쇼처럼 보여줄 수있다. – Basit

+0

일반적으로 "넓은"테이블을 사용하지 마십시오. "좁은"(레코드 당 필드가 적음), "깊은"레코드가 많아서 테이블을 끌어 당기는 것이 쉽고 인덱스에서 대부분 이익을 얻습니다. 페이스 북에는 대규모 서버 클러스터 (900 개의 마스터/슬레이브 페일 오버 쌍)가 있지만 개념 스키마는 친구 네트워크를 유지하는 상호 참조 테이블과 매우 견고하지만 좁은 영구 사용자 데이터 (프로필)를위한 테이블 그 이상입니다. 테이블에있는 모든 게시물에 대한 테이블입니다.이 게시물은 과도하게 색인이 생성되고 파티션이 지정되어 있으며 해당 사용자의 모든 게시물을 검색하거나 해당 사용자에게 (친구가 작성한) 벽에 게시하여 쿼리합니다. – KeithS

+0

이 방법을 찾았습니까? http://groups.drupal.org/node/19249이 접근법은 매우 역동적이고 활동은 페이스 북 쇼와 같이 보여줍니다. – Basit

관련 문제