2012-06-19 3 views
0

코드를 실행할 때마다 사전에 구문 분석 할 필요가있는 약 10million 행의 100MB 파일이 있습니다. 이 프로세스는 매우 느리고 속도를 높이는 방법을 찾고 있습니다. 한 가지 생각은 파일을 한 번 구문 분석 한 다음 pickle을 사용하여 디스크에 저장하는 것입니다. 이것이 속도 향상을 가져올 지 확신하지 못합니다.파일 또는 unpickle을 다시 처리하기

의견을 보내 주시면 감사하겠습니다.

EDIT : 몇 가지 테스트를 마친 후 사전을 만들 때 속도 저하가 발생한다고 걱정됩니다. Pickling은 훨씬 빨라 보이지만, 더 잘할 수는 있습니다. 더 그랜드

+3

시도하는 데 몇 분 정도 걸립니다. 시도해 봤어? –

+1

당신이하고있는 파싱 작업의 양과 pickler가 수행 한 작업의 양에 따라 다릅니다. I/O 바인딩 일 수 있습니다. 알아낼 수있는 유일한 방법, 그리고 나는 Stackoverflowers가 당신을 위해 그것을 할거라고 생각하지 않아요 :) – JoeFish

+0

각 라인은 사전에 어떻게 끝나나요? –

답변

0

MessagePack

가장 높은 프로토콜을 사용하는 경우에도 내 경험에 훨씬 더 빨리 다음의 cPickle을 파이썬/데이터로드를 투기하고있다.

그러나 1 천만 개의 항목이있는 사전이있는 경우 컴퓨터 메모리의 최대 한도에 도달하지 않았는지 확인하고 싶을 수 있습니다. 메모리가 부족하여 스왑을 사용해야하는 경우 프로세스가 훨씬 느려집니다.

+0

그는 100MB 파일이라고합니다. 그는 추억을 잃을 가능성이 너무 적습니다. –

+0

@ChinmayKanchi 사전 데이터 구조는 실제로 상당한 메모리 오버 헤드를 생성 할 수 있습니다. 1,000 만 라인, 100 MB 파일로 한 줄로 된 키와 값으로 구분 된 파일로 끝까지 테스트하면 1Gb 이상의 메모리로 확장됩니다. 실제로하는 일에 따라 비용이 빨리 합산 될 수 있습니다. – Trevor

0

당신이 데이터를 사용하는 방법에 따라 수 파일과 게으른 부하

  • 저장 그것으로 인덱스를 생성
  • 많은 작은 파일 만 무엇이 필요 부하로

    • 분할을 데이터베이스를 쿼리 한 다음 데이터베이스를 쿼리하십시오.

    데이터가 어떻게 생겼는지 더 잘 알 수 있습니까?

    데이터 사용 방법은 무엇입니까? 실제로 모든 실행마다 모든 행을 사용합니까? 각 실행에서 하위 집합 만 사용하는 경우 데이터를 미리 정렬 할 수 있습니까?

  • +0

    각 실행마다 모든 단일 행이 필요합니다. 데이터가 사전 정렬되어 있으며 읽기는 여전히 느립니다. –

    관련 문제