2012-10-24 2 views
1

약 12 ​​열과 함께 MySQL 데이터베이스를 사용하는 웹 응용 프로그램이 있으며 수백만 개의 레코드가 한 문자 코드로 코딩되어 있습니다. 크로스 섹션은 WHERE 절을 추가하여 조회 할 수 있습니다 :수백만 행의 고유 한 값 계산 - NoSQL에 적합합니까?

SELECT col1, COUNT(col1) AS num FROM my_table WHERE col2='U' GROUP BY col1

각 페이지는 이런 종류의 12 쿼리, 각 열에 하나 뺀 WHERE 절에 표시된 하나에 대해 수 있습니다.

캐싱 시스템이 있지만 데이터가 매일 업데이트되어 (수십만 개의 레코드가 추가됨) 처음에는 캐시를 생성하는 프로세스가 매우 느립니다. 나는 여전히 NoSQL에 대한 생각을 고수하려고 노력하고 있으며, 다른 패러다임이 많다. 따라서 각 레코드가 동일한 형식을 따르고 있으므로 JOIN이 없으면 NoSQL 데이터베이스로 전환하는 것이 적절한 상황입니까? 그렇다면 어느 것이 좋습니다 (또는 어떤 종류)?

편집 : PHP 호환이 가능해야한다고 덧붙여 야합니다.

답변

0

좋은 질문입니다. 수백만 개의 행 작업 내 경험에

, 나는 이것을 달성하는 가장 좋은 방법은 쿼리 이런 종류의 작업을 구축 특정 데이터베이스를 사용하는 것입니다 생각 항상

까다 롭습니다.

기본적으로 MySQL은 행 지향이며 트랜잭션 데이터베이스 (OLTP)로 작동하도록 설계되었으므로 작은 행 세트를 빠르게 삽입, 업데이트, 삭제할 수 있습니다. 그러나 이러한 종류의 쿼리로 대규모 데이터 세트에서 작동하도록 설계되지 않았습니다. 따라서 수백만 행의 값을 계산할 때 시간이 걸리거나 때로는 결과가 표시되지 않습니다 (메모리 오버플로 ...)

쿼리는 일반적인 분석 쿼리 (열과 GROUP BY에 대한 집계 포함)입니다. 열 기반 데이터베이스의 사용을 고려해야합니다. 이러한 데이터베이스는 대규모 데이터 세트를 처리하도록 최적화되고 설계되었습니다. (Column oriented database)

스키마를 명확하게 정의하고 열 기반 데이터베이스 만 있으면되므로 큰 데이터 세트를 처리하는 데 NoSQL 데이터베이스를 사용하지 않았습니다. 그 중 하나를 사용하려면 수행하려는 조회 (예 : 집계 유형 SUM, COUNT, ...)를 지원하는지 확인하십시오. 또한 매일 새 행을 삽입하는 방법을 알고 있어야합니다.

관련 문제