현재 사용 모니터링 응용 프로그램의 경우 Postgres에서 CouchDB 로의 변경을 고려 중입니다. 일부 숫자 :CouchDB 용 권장 문서 구조
5 분마다 폴링 된 약 2,000 건의 연결로 하루에 약 600,000 개의 새 행이 있습니다.
t_usage {SERVICE_ID, 타임 스탬프에 Data_IN, DATA_OUT}
t_usage_20100101이 t_usage을 상속 : 포스트 그레스, 우리는 하루 파티션이 데이터를 저장합니다.
t_usage_20100102는 t_usage를 상속합니다.
우리는 파티션이 존재한다고 가정하는 낙관적 인 저장 프로 시저를 사용하여 데이터를 작성하고 필요한 경우이를 작성합니다. 우리는 매우 빨리 삽입 할 수 있습니다. 중요성과 현재의 성능을 위해 데이터, 유스 케이스의 읽기
은 다음과 같습니다* 단일 서비스, 매일 사용 : 좋은 성능
* 여러 서비스를, 월 사용법 : 성능 저하
* 싱글 서비스, 월 사용법 : 성능 저하
* 다중 서비스, 다중 달 : 아주 성능 저하
* 여러 서비스, 단일의 날 : 좋은 성능
파티션이 지금까지 어떤 일에 최적화되어 있기 때문에이 말이 우리 대부분의 imp 오르 팅 유스 케이스. 그러나 우리는 2 차 요구 사항을 향상시키는 방법을 찾고 있습니다.
예를 들어, 오전 8 시부 터 오후 6 시까 지 결과를 제공하는 경우와 같이 쿼리를 매개 변수화해야하는 경우가 종종 있으므로 요약 표가 제한적으로 사용됩니다. (이 매개 변수는 충분한 빈도로 변경되어 여러 개의 요약 테이블을 만드는 것이 금지됩니다).
그 배경에서 첫 번째 질문은 다음과 같습니다. CouchDB가이 데이터에 적합한가? 위의 사용 사례를 감안할 때 CouchDB 문서에서 데이터를 가장 잘 모델링하는 방법은 무엇입니까? 우리가 벤치마킹의 과정에서 지금까지 조립 한 일부 옵션 (_id, _rev 제외)입니다 : 1 일 기준, 연결
{
service_id:555
day:20100101
usage: {1265248762: {in:584,out:11342}, 1265249062: {in:94,out:1242}}
}
약 60,000 새 문서 달 당
한 문서. 대부분의 새 데이터는 새 문서가 아닌 기존 문서의 업데이트입니다.
(여기에서 사용중인 객체는 폴링의 타임 스탬프에 키를 입력하고 바이트 인과 바이트 값을 출력합니다). 한달에 연결
{
service_id:555
month:201001
usage: {1265248762: {in:584,out:11342}, 1265249062: {in:94,out:1242}}
}
약 2,000 새 문서 달 당
한 문서. 필요한 기존 문서에 대한 보통 업데이트. 데이터의 행 당
한 문서는 한 달에
{
service_id:555
timestamp:1265248762
in:584
out:11342
}
{
service_id:555
timestamp:1265249062
in:94
out:1242
}
약 15,000,000 새 문서를 수집. 모든 데이터는 새 문서에 삽입됩니다. 더 빨리 삽입 할 수 있지만, 1 억년 또는 2 년 후에 수억 개의 문서가 얼마나 효율적으로 될 것인지 궁금합니다. 파일 I/O는 금지 된 것처럼 보일 것입니다. (비록 내가 처음으로 그것을 잘 이해하지 못한다고 인정하는 사람입니다.)
저는 RDMS 습관을 깨는 것이 어렵지만 문서 지향적 인 방식으로이 접근법을 시도하고 있습니다.보기에는 매개 변수화를 최소화 할 수 있다는 사실이 염려 스럽습니다. 그렇다면 위 중 어느 것이 가장 적절할까요? 내가 더 잘 수행 할 것으로 생각하지 않은 다른 형식이 있습니까?
미리 감사드립니다.
제이미.
CouchDB는 뷰 서버가보기를 처리하기 위해 여러 시스템 프로세스를 실행하므로 여러 코어에서 확장이 잘됩니다. 나머지 CouchDB는 Erlang에 있으며 여러 개의 코어를 사용하는 데에도 뛰어납니다. – mikeal
네 말이 맞아. 나는 테스트를 실시했고, 나는이 큰 문서 2000 개 (v0.9 Couch 인스턴스에 동시에 100 개를 삽입하는 20 개의 프로세스)를 삽입했다. 4 코어 2.66G Mac Pro에서는 기본적으로 3m30에 삽입되었습니다. 소파는 CPU의 350 %를 차지했습니다. 결국 디스크 파일은 ~ 2G였습니다. 압축 후에도 전혀 변하지 않았습니다. 대조적으로, 2000 "일일"문서를 삽입하는 데 18 초가 걸렸습니다. 물론 더 빨라요. 3m30s가 5m 창에 너무 가깝습니다. 18 대가 훨씬 낫습니다. 압축은 거의 3m가 걸렸습니다. –
대단히 감사합니다. 시작하기 좋은 곳입니다. 우리는 몇 가지 벤치 마크를 실행했고 당신과 거의 같은 것을 발견했습니다. 우리가해야 할 주요 쟁점은 데이터에 대한 지속적인 업데이트입니다. "전체 월"문서가 너무 느려지는 것처럼 보입니다. 우리가 정기적으로 압축 할 수있는 한 잘하면 우리는 괜찮을거야. 데이터 포인트 당 하나의 문서로 갈 수는 없지만 파일 IO가 금지 된 것으로 의심되는 것은 수치스러운 일입니다. 불행히도 다른 종류의 문서를 업데이 트하려면, 우리는 _rev를 얻기 위해, 우리가 쓸 수 전에 읽을 필요가 ... – majelbstoat