2012-06-02 4 views
-2

나는 uuids, 나이, 성별, 가족 수입 및 12 개의 해당 필드가있는 사용자의 단일 테이블 데이터베이스를 갖게됩니다. 약 40 ~ 50 백만. 나는 나이 범위, ​​소득 범위 등을 기반으로 질문을하고 uuid의 목록을 가져와야합니다. 연결된 경우 각 행은 약 400 자 여야합니다. 400 바이트에 50Mil을 곱하면 17 ~ 18GB가됩니다. 그것은 천천히 자랄 것이다.이 유스 케이스에 가장 적합한 데이터베이스와 하드웨어

이 데이터를 보유하고 빠른 쿼리를 실행하는 데 가장 적합한 데이터베이스 시스템이 될 것입니다. Mongo 또는 MySQL? 또한 어떤 종류의 하드웨어를 유지해야합니다.

또한 누군가가 쿼리 시간을 mySQL 또는 Mongo가 경험에 따라 결정할 수 있는지 알려줍니다. 이걸 기반으로 전체 시스템의 다른 구성 요소의 아키텍처를 설계해야합니다.

+0

나는 Mongo가 하나의 테이블에 관계형 데이터베이스를 사용하여 무의미한 것처럼 보일 것입니다. –

+0

이 라인 (진부한 경고)을 사용하는 것을 싫지만 : "나는 그것보다 큰 색인을 가지고 있습니다". 플러스 주제가 있다면, [Stack Overflow는 추천 엔진이 아닙니다.] (http://meta.stackexchange.com/a/128562/179419). – Ben

+0

무의미한 질문 –

답변

2

4050 만개의 레코드 또는 17-18GB는 "큰"것으로 간주되지 않을 것이라고 나는 말하지 않을 것이다. 관계형 데이터베이스가 충분해야합니다.

현대적인 서버이면 충분합니다. Windows, Linux - 가장 잘 알고있는 것을 선택하십시오. 나는 64 비트가 필요하다고 말하고 싶다. enough RAM을 추가하면 모든 것을 메모리에 저장할 수 있습니다.

너무 많은 요소 (하드웨어, 스키마, 색인 등)에 의존하기 때문에 어느 누구도 시간을 쿼리 할 수 ​​없습니다. 가장 좋은 방법은 시간을 스스로 확인하는 것입니다.

가장 큰 문제는 범위별로 쿼리하는 것입니다. 이것은 트랜잭션 데이터베이스와 같지 않으며 데이터 마이닝웨어 하우스와 비슷합니다. 아마도 시간, 위치, 소득 등의 차원을 가진 스타 스키마가 당신이하려는 일에 더 잘 어울릴 것입니다.

0

모든 정보를 하나의 테이블, 특히 그 많은 행을 가진 테이블에 저장해야하는 이유는 없습니다. 이 대규모 프로젝트의 경우 관계형 데이터베이스가 작동하는 방식과 인덱싱 작동 방식을 배우는 것이 좋습니다. 당신이 이것을 구현하려는 방식은 여러분이 던진 데이터베이스 나 하드웨어에서 느려질 것입니다. 관계형 데이터베이스로 설계 한 것처럼 여러 개별 테이블을 사물로 저장하고 외래 키를 사용하여 다른 테이블에 액세스하는 경우 성능이 크게 향상됩니다.

This is very dry (필수). 당신은 정말로 그것을 잘 이해하려고 노력해야합니다.

또한 indexing을 읽어야합니다. 각 데이터베이스는 약간 씩 다르므로이를 구현하는 방법은 선택한 데이터베이스에 따라 다릅니다.

나는 당신이 당신의 성과를 상당히 증가시킬 것이라는 것을 의미합니다. 필자는 15-20 분이 걸린 쿼리를 잘못 검토하여 재 설계하여 관계형 데이터베이스 디자인, 인덱스 및 최적의 쿼리 디자인을 통해 최적화하고 밀리 초로 줄였습니다.

+0

데이터가 다른 소스에서 데이터로 전송되는 방식으로 여러 관련 테이블에 저장하기가 어렵습니다. –

관련 문제