문제

다음 기능을 지원하는 데이터베이스를 찾고 있습니다.

1) 데이터베이스의 레코드는 Python 사전 또는 Perl 해시와 같습니다. 예를 들어, "구매"레코드는 다음과 같습니다.

<purchase 5436> = { product: "BMX Bike", price: 99.50, city: "Springfield" }

2) 레코드는 가변 길이의 배열에 저장됩니다. 데이터베이스에는 이러한 배열이 많이 포함되어 있습니다. 예를 들어, 구매 테이블은 다음과 같습니다.

purchase array 1: [ <purchase 5436>, <purchase 54>, <purchase 112> ]
purchase array 2: [ <purchase 76>, <purchase 5984>, <purchase 1102>, <purchase 12> ]
...
purchase array 658: [ <purchase 10142>, <purchase 35>, <purchase 6458>, <purchase 23> ]

3)이 데이터베이스에서 두 가지 종류의 쿼리를 수행하고 싶습니다.

3a) 다양한 기준과 일치하는 레코드의 #을 계산하십시오. 예를 들어, 50 이상의 값으로 얼마나 많은 구매가 이루어 졌습니까? 나는 이것을 지원하는 많은 데이터베이스를 알고 있습니다.

3B) 레코드가 특정 순서로 표시되는 시간 수를 계산하십시오. 예를 들어, 50 개가 넘는 구매가 몇 배가되었고 "Springfield"에서 구매가 이루어 졌습니까? 나는 당신이 이것을하기 위해 어떤 종류의 데이터베이스를 사용할 것인지 모르겠습니다.

편집 : Steve Haigh에 대한 응답 : 속도가 중요하다고 언급 했어야 하며이 데이터베이스는 기가 바이트의 데이터를 지원해야합니다. 예를 들어, 1,000,000,000 구매 배열이있을 수 있으며 "Springfield"에서 구매 한 다음 "Hometown"에서 구매 한 수를 계산하고 싶습니다 (주문이 중요 함). 어쩌면 내가 틀렸을 지 모르지만 관계형 DB 가이 목적으로 너무 느리다고 생각합니다.

도움이 되었습니까?

해결책

링크 또는 정션 테이블을 사용하여 관계형 DB 로이 작업을 수행 할 수 없습니까?

주문 열, 제품 열 및 주문 당 모든 제품에 대한 행이있는 테이블 주문 제품이 있습니다.

나는 이것을 생각 해요 기사 아마도 내가 할 수있는 것보다 더 잘 표현 될 것입니다.

다른 팁

예를 들어, 1,000,000,000 구매 배열이있을 수 있으며 "Springfield"에서 구매 한 다음 "Hometown"에서 구매 한 수를 계산하고 싶습니다 (주문이 중요 함). 어쩌면 내가 틀렸을 지 모르지만 관계형 DB 가이 목적으로 너무 느리다고 생각합니다.

당신이 설명하는 것은 전형적인 것입니다 데이터웨어 하우스 쿼리 및 AFAIK는 일반적으로 관계형 DBS를 사용하여 구현되지만 동시 거래 처리보다는보고에 최적화 된 것입니다. 그러나 "일반"RDBM을 사용하는 경우 속도의 차이가 극단적 일 것이라고 생각하지 않습니다. 물론 돈이 충분하다면 특별한 데이터웨어 하우스 DBMS를 찾을 수 있습니다.

속도에 가장 중요한 영향은 Be 1) 대형 디스크 기반 데이터 세트를 쿼리하기 위해 최적화 된 기술입니다. 이것이 바로 모든 "실제"DMBS가 제공하는 것과 2) 데이터가 올바른 방식으로 구성된 데이터입니다.

3B) 레코드가 특정 순서로 표시되는 시간 수를 계산하십시오. 예를 들어, 50 개가 넘는 구매가 몇 배가되었고 "Springfield"에서 구매가 이루어 졌습니까? 나는 당신이 이것을하기 위해 어떤 종류의 데이터베이스를 사용할 것인지 모르겠습니다.

관계형 DB를 사용합니다 이러한 종류의 쿼리를 지원하도록 설계된 스키마. 데이터가 어떻게 표현되어야하는지에 대한 선입견을 포기해야합니다.

컬렉션에 키-> 값 쌍이 그룹화되어 있으므로 관계형 데이터베이스가 필요하지 않으므로 컬렉션의 레코드를 반복하려면 두 테이블 (레코드 용, 컬렉션 용 1 개) 사이에 조인이 필요합니다. 귀하의 사건은 비용이 가치가 없습니다.

성능 요구 사항의 경우 전체 구조가 메모리에 맞고 디스크에 액세스 할 필요가 없는지 확인하는 것입니다. 이 작업을 수행하려면 여러 서버와 다른 서버로 조회를 발송하는 마스터가 필요할 수 있습니다 (구조의 크기가 최신 서버가 처리 할 수있는 합리적인 메모리의 양보다 크고 속도 요구 사항이 너무 커집니다. 디스크 페이지 매김을 감당할 수없는 큰.

당신이 언급 한 쿼리의 종류의 경우, 최선의 선택은 약간의 데이터 중복성을 갖는 것입니다. 삽입시, 당신은 그 수를 추적 할 것입니다. 데이터 중복 텐트는 이름을 읽는 것만으로 사람들을 놀라게하는 텐트를 만들지 만 때로는 필요합니다. 구현에 매우주의를 기울이고 여기에 많은 양의 단위 테스트를 투자하십시오.

그러나 밀리 초 문제로 실시간으로 할 수 없다는 점은 일종의 쿼리가있을 수 있으며, 한 조건으로 구매를 찾은 다음 다른 조건으로 구매하는 것이 다음과 같습니다. 삽입/삭제/수정하는 동안이 숫자의 라이브 추적을 유지하는 방법을 찾거나 실제로 수백만의 배열을 반복해야합니다. 데이터가 얼마나 최근에 필요한지 고려하고 몇 시간마다 사전 계산하여 해당 통계를 생성 한 다음 조회 키를 사용하여 O (1)로 액세스 할 수 있어야합니다.

간단히 말해서, 당신의 문제는 그것을 해결하기 위해 사용하기로 결정한 기술을 넘어서는 것입니다.

나는 당신이 찾고있는 것을 완전히 이해하는지 확실하지 않지만 당신은 couchdb? . 문서 지향 및 스키마가 없습니다

당신이 묘사하는 것은 매우 비슷합니다 유행성 이하선염 배열에서 "레코드"순서가 가능한 곳에서 쿼리를 정의하는 능력에 대해 의문이 있더라도.

링크를 살펴보면 현재 볼 수 있듯이 현재 상용 버전도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top