2012-10-22 4 views
0

Google 애널리틱스와 유사한 애널리틱스 도구를 개발 중입니다. 그러면 키워드, 방문수 및 페이지가 데이터베이스에 저장됩니다.Google 애널리틱스와 같은 도구를 호스팅하기위한 서버 설정?

많은 사람들이 사용하기 때문에 데이터베이스가 매우 빠르게 커질 수 있습니다.

데이터베이스를 어떻게 설정해야합니까? 모니터링되는 모든 계정과 모든 웹 사이트에 대해 하나의 데이터베이스가 있습니까? 또는 모든 계정에 대해 하나의 데이터베이스를 갖는 것이 더 낫습니다.

또한 하나의 전용 서버로 시작할 계획이지만 미래에 하나 이상의 서버가 필요하므로이를 염두에 두어야합니다.

나는 또한 모든 계정에 대해 여러 데이터베이스를 수행하면 앱의 스키마가 변경 될 때 모두 업그레이드 스크립트를 실행해야한다는 것을 알고 있습니다.

답변

1

어떤 종류의 데이터베이스를 사용 하시겠습니까? 관계형 데이터베이스 (PostgreSQL, MySQL)와 "NoSQL"(MongoDB, CouchDB) 간에는 큰 차이가 있습니다. (MongoDB, CouchDB)

PostgreSQL에 대해서는 경험이있는 유일한 데이터베이스이기 때문에 관계형에 대해서만 설명하려고합니다.

먼저 모든 것을 하나의 데이터베이스에 보관합니다. 계정 당 데이터베이스를 사용할 때 이점은 없습니다.

두 번째로, 단일 기계를 초과하여 성장할 것이라는 확신이 있어야합니다. 읽기 전용보다 많은 쓰기 작업을 처리 할 수있는 응용 프로그램이 있으므로 마스터 - 슬레이브 복제는 고 가용성을 위해 사용될 뿐이며 PostgreSQL을 사용한 다중 마스터 복제는 쉽지 않습니다.

나의 마지막 연구에서 가장 어려운 방법은 쓰기가 가능하도록 설계된 Postgres-XC과 같은 도구를 사용하는 것이었지만 생산 준비가 어떻게되어 있는지 전혀 알지 못합니다.

다른 해결책은 Bucardo 또는 SkyTools와 같은 도구를 사용하는 것입니다. SkyTools에 대한 경험은 없었지만 작년에 Bucardo에서 일하는 데 많은 어려움을 겪었습니다.

마지막 해결 방법은 sharding입니다. 간단한 방법은 shard number = id % 10과 같은 일을하는 것입니다. 그러나 이것을 사용하면 샤드를 추가/제거 할 때마다 클러스터를 재조정해야합니다. 올바른 샤드에 쿼리를 전달할 수 있도록 "샤드 인식"애플리케이션을 작성해야합니다.

어쨌든 전에 말했듯이, 먼저 샤드/클러스터 화해야합니다.

"NoSQL"측에 대해서는 솔루션에 대한 경험이 없지만 MongoDB와 CouchDB가 자체적으로 샤딩을 처리한다는 것을 알고 있으므로 솔루션을 사용하는 것이 더 쉽습니다. 그러나 꽤 많이 포기합니다.

1

나는 Vincent의 대답에 대해 조금 더 자세히 설명하겠습니다.

샤딩에 관해서는 PL/Proxy과 함께 좋은 경험을했습니다. 그리고 샤딩을 사용하면 단일 기계를 문제없이 (읽기 또는 쓰기) 사용할 수 있습니다.

Londiste는 Skytools에서 매우 쉽게 설정하고 사용할 수 있습니다. 그리고 그걸로 Postgres를위한 훌륭한 메시지 솔루션 인 PgQ를 얻을 수 있습니다.

관련 문제