2013-11-22 4 views
0

사이트의 이벤트/게임의 경우 사용자가 이동하는 모든 페이지를 추적하고 사용자 이름으로 저장하려고합니다. 그것은 접근 가능하고 데이터가 조작 될 수 있도록 데이터베이스를 통해 수행되어야합니다. 필자는 단지 MySQL을 사용했기 때문에 지금 당장 나와있는 내 솔루션은 사용자 이름과 방문한 페이지가있는 페이지 방문 테이블 일뿐입니다.사용자 위치를 추적하는 방법은 무엇입니까? (데이터베이스)

스케일링 목적으로는 그리 비효율적 인 것처럼 보입니다. 이런 종류의 일은 몇 주 내에 수백만 행으로 끝날 수 있습니다.

효율적인 것으로 보이지 않는 또 다른 예는 투표 시스템입니다. 예를 들어 스택 오버플로에 대해 누군가가 투표하면 테이블에 대한 다른 행이됩니다. 이것은 데이터를 저장하는 가장 좋은 방법처럼 보이지 않습니다.

이러한 종류의 응용 프로그램에 가장 적합한 대안은 무엇입니까? 감사합니다.

+2

mysql은 방대한 양의 데이터를 저장하도록 설계되었습니다. 따라서 저장 용량으로 저장할 수 있다면 문제가되지 않습니다. – Joren

+0

테이블에 5 천만 개의 행이 있다고해도? 내 말을 잘못하지 말라는 것을 의미하는 것은 아니지만 나는 그것에 대비하고 싶다. – user3011922

+0

나는 단지 사용자 이름을 한 번만 저장 한 다음 그 사용자 이름과 관련된 모든 데이터를 더 효율적으로 보관하는 데이터베이스처럼 보입니다. (물론 존재하는지 모르겠습니다.) – user3011922

답변

0

앤드류시가 말한 내용. db가 적절하게 구성되어있는 한 - 적어도 2 번째이지만 복잡성에 따라 아마도 3 번째 정규 형식 인 것이 좋습니다 - 문제가되지 않습니다. 이것이 바로 데이터베이스가 필요한 것입니다.

DB 정규화에 대한 연구를 수행하고 적절한 인덱싱 기술을 사용하면 문제가 없습니다.

+0

나는 데이터베이스 실무에 관해서 정말 유익한 책 (특히 교과서 중 하나)과 같은 것을 보았다. 그 트릭을 수행 할 것이라고 생각합니까, 아니면 특별히 MySQL에서 뭔가를해야합니까? – user3011922

+0

정규화에 대해 말하면 정상적으로 처리되어야합니다. DB 간에는 기본적으로 동일합니다. – danny2327

0

첫 번째 예인 분석 데이터 캡처 - 각 페이지 방문을 새로운 행으로 저장하는 것이 데이터에 대해 가장 유연하고 유용한 형식입니다. 단순히 각 사용자 및 페이지 조합에 대한 행을 저장 한 다음 페이지 방문이 발생할 때마다 값을 증가시킬 수는 있지만 날짜/시간을 기준으로 데이터를 필터링/그룹화하는 기능을 잃을 수 있습니다.

MySQL은 아무런 문제없이 수백만 행을 처리 할 수 ​​있습니다. 그것은 결국 데이터베이스가 필요한 것입니다. 당신은 innodb 테이블을 사용하고 필터링 할 필드의 색인을 생성해야한다. 또한 현명한 데이터 유형을 선택해야합니다. 가능한 가장 작은 데이터 유형을 선택하십시오.

수백만 개의 행을 쿼리하는 것이 "빠르지"않지만 다른 한편으로는 사용자가 수행 할 수있는 것이 아니기 때문에 사용자의 경험에 영향을 미치지 않아야합니다.

+0

이상적으로 사용자는 테이블을 직접 쿼리 할 수 ​​있어야합니다. 그 밖의 사람들은 'SELECT * FROM table WHERE username = : username'유형 쿼리를 넘어서 어떤 페이지를 보았는지 알 수 있을까요? – user3011922

0

이런 식으로 프로그래밍하는 것이 표준 방법입니다. 그것은 데이터베이스가 사용되는 것입니다. 그러나 응용 프로그램이 커질수록 결국 관리 할 수없는 크기가되어 결국 확장 할 시간입니다. (최소한, 그것이 성공할 것이라는 것을 당신이 암시하고있는만큼 대중적이라고 가정하십시오.)

그 시점에서, 샤딩, 복제 세트 또는 ElasticSearch와 같은 것들을 살펴볼 시간입니다. Mongo는 샤드와 복제 세트를 쉽게 설정하고 JSON을 기반으로하므로 Elastic Search와 호환 성이 높기 때문에 MySQL 대신 MongoDB을 사용하여 이것을 설계하는 것이 좋습니다.

이 모두는 앞으로 어떻게 계획 할 것인지, 그리고 사이트의 인기가 그 수준으로 폭발 할 것이라고 정말로 생각하는지 여부에 달려 있습니다.

관련 문제