2011-04-20 10 views
7

현재 (현재) 약 15,000 개의 제품에 대한 통계 데이터를 가져올 응용 프로그램을 구축 중입니다. 현재, 하나의 소스에서 매일 통계에 대해 하나의 데이터베이스 테이블을 유지한다면, 하루에 15,000 행의 데이터 (행 당 5-10 개의 필드가 주로 float, int라고 함)가 증가합니다. 분명히 1 년에 5 백만 건이 넘는 레코드를 하나의 테이블로 동일시합니다.트렌드 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

다른 소스의 데이터를 가져 와서 새로운 소스마다 5 백만 개의 레코드 크기를 늘릴 생각만큼 큰 문제는 아닙니다.

이제 데이터는 통계/추세 기반 데이터이며 기본적으로 레코드 당 1 회 쓰기 및 많은 읽기가 발생합니다. 비행보고 및 그래프 작업을 위해 규칙 (날짜 범위, 값 범위 등)을 기반으로 데이터의 하위 집합에 대한 빠른 액세스가 필요합니다.

데이터 (MySQL InnoDb 테이블)를 저장하는 가장 좋은 방법은 무엇입니까, 아니면 통계/경향 데이터를 저장하고 처리하는 더 좋은 방법이 있습니까?

기타 옵션 나는이 시점에서 버렸습니다. 1. 여러 데이터베이스 (제품 당 하나). 각 데이터 소스마다 별도의 테이블이 있습니다. 2. 하나의 데이터베이스, 여러 테이블 (각 제품/데이터 소스에 하나씩) (즉, 데이터베이스 : 제품, 테이블 : ProductA_SourceA, ProductA_SourceB) (데이터베이스 : ProductA, 테이블 : Source_A, Source_B, Source_C) 등) 3. factual 또는 데이터베이스의 특정 제품 정보 및 statistical의 데이터가 모두 csv, xml, json (별도의 디렉토리에있는 플랫 파일)입니다.

지금까지는 이러한 옵션 중 아무 것도 관리하기가 쉽지 않으며 각 옵션마다 장단점이 있습니다. 개발 단계의 알파 단계로 넘어 가기 전에 합리적인 해결책이 필요합니다.

답변

2

열 기반 데이터베이스를 사용해 볼 수 있습니다. 이러한 종류의 데이터베이스는 설명하는 종류의 분석적 쿼리에서 훨씬 효과적입니다.

http://en.wikipedia.org/wiki/Column-oriented_DBMS

우리는 InfiniDB와 함께 좋은 경험을 했어 :

http://infinidb.org/

및 Infobright도 좋아 보인다 : 거기에 몇 가지 옵션이 있습니다

http://www.infobright.com/

모두 InfiniDB Infobright는 무료 오픈 소스 커뮤니티 에디션을 보유하고 있으므로 d를 사용하여 얻을 수있는 성능 이점에 대한 벤치 마크를 얻으십시오.

성능을 향상 시키려면 데이터 파티셔닝을 참조하십시오.

+0

컬럼 기반 엔진을 사용하여 MySQL에 대해 이야기하는 PDF를 찾았습니다. http://forge.mysql.com/w/images/5/54/MySQLColumnDatabases.pdf,이 옵션을 좀 더 살펴 보겠습니다. 전에 컬럼 기반 스토리지에 대해 들어 본 적이 없었는데, 이것은 내가 찾고있는 것일 수 있습니다. –

1

데이터의 모양과 실행하려는 집계/동향의 종류에 따라 약간 다릅니다. 대부분의 관계형 데이터베이스는 이러한 종류의 시간 데이터에 적합합니다. 수십억 개의 레코드가 있더라도 적절한 인덱싱 및 파티셔닝을 통해 필요한 레코드를 빠르게 찾을 수 있습니다. Oracle, MySQL, SQL-Server 같은 DB는이 범주에 속합니다.

당신이 일하는 제품이 주식이라고 말하면, 각 주식에 대해 매일 새로운 가격을받습니다 (매우 현실적인 경우). 새로운 거래, 주식, 거래 빈도로 인해이 데이터는 기하 급수적으로 빠르게 증가 할 것입니다.그러나 교환을 통해 데이터를 분할 할 수 있습니다. 또는 지역.

다양한 비즈니스 인텔리전스 도구는 검색 전에 데이터를 사전 집계하는 데 도움이 될 수 있습니다. 이것은 기본적으로 열 기반 데이터베이스입니다. (데이터웨어 하우스 및 OLAP 구조는 미리 데이터 세트를 마사지하고 집계하는 데 도움을 줄 수 있습니다.)

데이터웨어 하우스의 개념과 마찬가지로 너무 오래 걸리는 집계 문제가있는 경우 집계를 하루 아침에 쿼리하는 것이 더 빠른 구조로 마무리 할 수 ​​있습니다. 이전 예에서는 데이터의 큰 덩어리를 매우 드물게 검색 할 필요가있을 수 있지만 더 자주 52 주 같은 일부 집계 만 검색하면됩니다. 많은 양의 원시 데이터를 하나의 형식으로 저장할 수 있으며 매일 밤마다 주식 당 데이터 포인트가 수천 개가 아닌 테이블에 필요한 작업 만 수행하면 3 또는 4가됩니다.

If 추적하고있는 추세는 실제로 모든 곳 또는 복잡한 알고리즘에 집중되어 있으므로 완전한 BI 솔루션이 조사 대상이 될 수 있으므로 사전 구축 된 분석 및 데이터 마이닝 알고리즘을 사용할 수 있습니다.

데이터가 구조화되지 않은 경우 Hadoop이나 Mongo와 같은 NoSQL 데이터베이스를 사용하는 것이 더 나을 것입니다. 물론 데이터베이스에 대한 지식은 관계형 형식에 더 중점을 둡니다.

관련 문제