문제

일부 입력 파일을 처리하고 획득 된 레코드를 다음과 같이 삽입합니다. Couchdb 문서. 나는 삽입 속도가 속도가 감소하고 있다는 것을 알아 차렸다. 데이터베이스 크기가 증가합니다.

내가하는 일은 다음과 같습니다 :

  1. 입력 파일에서 데이터 읽기
  2. 구조화 된 문서를 얻기 위해 데이터를 처리합니다
  3. 문서를 로컬 버퍼에 넣습니다
  4. 버퍼가 1000 개의 문서가있는 즉시 CouchDB 벌크 삽입
  5. 를 수행하십시오. 입력 데이터가 완전히 처리 될 때까지
  6. 반복
  7. 여기에서는 현재 실행 중입니다.

    2012-03-15 10:15:58,716 - docs= 10000 rate=2282.38 entries/s
    2012-03-15 10:16:46,748 - docs=100000 rate=1822.76 entries/s
    2012-03-15 10:17:47,433 - docs=200000 rate=1592.01 entries/s
    2012-03-15 10:18:48,566 - docs=300000 rate=1358.32 entries/s
    2012-03-15 10:19:54,637 - docs=400000 rate=1572.55 entries/s
    2012-03-15 10:21:01,690 - docs=500000 rate=1560.41 entries/s
    2012-03-15 10:22:09,400 - docs=600000 rate=1556.22 entries/s
    2012-03-15 10:23:16,153 - docs=700000 rate=1550.21 entries/s
    2012-03-15 10:24:30,850 - docs=800000 rate=1393.61 entries/s
    2012-03-15 10:25:46,099 - docs=900000 rate=1336.83 entries/s
    2012-03-15 10:27:09,290 - docs=1000000 rate= 871.37 entries/s
    2012-03-15 10:28:31,745 - docs=1100000 rate=1256.36 entries/s
    2012-03-15 10:29:53,313 - docs=1200000 rate=1140.49 entries/s
    2012-03-15 10:31:29,207 - docs=1300000 rate=1080.79 entries/s
    2012-03-15 10:33:23,917 - docs=1400000 rate= 741.65 entries/s
    2012-03-15 10:35:45,475 - docs=1500000 rate= 567.96 entries/s
    2012-03-15 10:39:04,293 - docs=1600000 rate= 564.01 entries/s
    2012-03-15 10:42:20,160 - docs=1700000 rate= 499.29 entries/s
    2012-03-15 10:46:06,270 - docs=1800000 rate= 505.04 entries/s
    2012-03-15 10:50:24,745 - docs=1900000 rate= 402.14 entries/s
    2012-03-15 10:55:23,800 - docs=2000000 rate= 346.19 entries/s
    2012-03-15 11:02:03,217 - docs=2100000 rate= 274.59 entries/s
    2012-03-15 11:08:21,690 - docs=2200000 rate= 269.57 entries/s
    
    .

    "rate"는 지난 1000 개의 문서의 삽입 속도를 보여줍니다. 당신이 볼 수 있듯이는 매우 빠르게 저하됩니다.

    • 는 이것이 정상입니까?
    • 높은 삽입 속도를 유지하기 위해 뭔가를 할 수 있습니까?
    • 큰 couchdb 데이터베이스에 대한 경험이 있습니까?
    • 공유하고자하는 조언은 무엇입니까?
도움이 되었습니까?

해결책

높은 삽입 속도는 디스크 캐시에 깔끔하게 피팅하는 모든 것에 의해 유사합니다.데이터베이스 크기가 증가함에 따라 BTREE를 업데이트하려면 결국 디스크에서 데이터를 읽어야합니다.삽입 테스트를 더 길고 그래프로 실행하는 것이 좋습니다. 앞에서 거대한 스파이크가 괴상한 것이 아니라 더 낮은이거나 더 덜 일정한 속도가 아니라는 것을 알아야합니다.

다른 스레드의 다른 스레드 에서이 질문을 묻는 또 다른 중요한 요소는 완전히 무작위 UUID를 사용했습니다.CouchDB는 B + 트리를 기반으로하기 때문에 완전히 임의의 ID를 삽입하면 최악의 시나리오가 업데이트됩니다.CouthDB는 많은 UUID 알고리즘을 제공합니다. 기본값 인 '순차'라는 기본값은 훨씬 더 나은 삽입 성능을 제공하기에 충분히 순차적으로 충분히 순차적 인 충돌 가능성이 매우 낮은 값을 반환합니다.

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