문제

그래서 제가"큰"다수"매우 큰"ASCII 파일의 수치 데이터(기가 바이트 모두),그리고 내 프로그램이 필요하는 프로세스의 전체 순차적으로 적어도 한 번.

에 대한 조언이 저장/데이터 로딩?나의 생각을 변환하는 파일을 바이너리를 그들을 더 작게 만들고 읽어오는 시간이 단축되었습니다.

해야 하드는 모든 것으로 한번에 메모리?
하지 않을 경우,여 무엇이 좋은 방법의 로딩 데이터 부분적으로?
어떤 것이 있는 자바 관련 효율 팁?

도움이 되었습니까?

해결책

그래서 어떤 경우에는 처리에 필요한 주위에 점프를 위한 데이터는 여러 파일에 여러 버퍼?일정 개폐의 바이너리 파일이 되고 비싸요?

나의 큰 팬 'memory mapped i/o', aka '직접적인 바이트 버퍼'.자바에서 그들은 불 매핑 바이트 버퍼 는 일부의 java.nio.(기본적으로,이 메커니즘을 사용하는 OS 가상 메모리 페이징 시스템을 지도하는 파일을 프로그래밍 방식으로 바이트 버퍼입니다.운영 체제 관리를 이동하는 바이트에서 디스크 및 메모리 자동 마술을 제공합니다.

나는 제안이 접근하기 때문에)그것이 나를 위해,그리고 b)그것은 당신에 집중하고 알고리즘과 JVM,OS 및 하드웨어 처리 성능을 최적화입니다.모든 자,그들은 무엇이 최선인지 알아보다 더 많은 그래서 우리에게 겸손하는 프로그래머를 위한 것입니다.;)

당신은 어떻게 사용 MBBs 에서의 컨텍스트?그냥을 만들 MBB 에 대한 각각의 파일들을 읽을 수 있습니다.당신은 단지를 저장하는 데 필요한 결과입니다..

BTW:얼마나 많은 데이터를 다루고 있습니다,GB?면 그것보다 3-4 기가바이트,다음이 작동하지 않을 것이 32 비트 기계로 MBB 구현은 피고에서 지정이 가능한 메모리에 의해 공간 플랫폼을 포함됩니다.64 비트 컴퓨터&OS 당신을 데려 갈 것이다 1TB 또는 128TB 의 매핑 가능한 데이터이다.

을 생각하는 경우에 대해 성과,그리고 커크 페퍼다인(소 유명한 Java 성능 전문가입니다.) 그와 관련된 웹 사이트 www.JavaPerformanceTuning.com 는 몇 가지 더 MBB 상세정보: NIO 성능 팁 과 다른 Java 성능과 관련된 것들입니다.

다른 팁

해야 할 수도 있습니에 항목 넓은 측정기 프로젝트 (수행에 대한 google 검색 "넓은 finder"java).

넓은 finder 읽고 포함해 많은 선에서 로그 파일,그래서 Java 구현하고 무슨 일을 하지 않았의 직원이 근무하고 있습니다.

변환할 수 있는 바이너리,그러나 당신은 당신이 1+뭔가의 사본 데이터 유지해야 하는 경우 원본다.

그것이 실용적일 수 있습을 구축하는 어떤 종류의 인덱스의 상단에있는 원래 ascii 데이터를,그래서 필요하신 경우에는 갈 데이터를 통해 다시 그것을 할 수 있는 빠르고서 이후의 시대.

당신의 질문에 응답하기 위해서는:

해야 하드는 모든 것으로 한번에 메모리?

하지 않는 경우가 있지 않습니다.어떤 파일할 수 있습니다,하지만 경우에 당신은 단지 처리 순차적으로,그냥 몇 가지 종류의 버퍼링을 통해 읽을 것을 하나 하나를 저장하이 무엇을 해야합니다.

하지 않을 경우,여 무엇이 좋은 방법의 로딩 데이터 부분적으로?

BufferedReaders/등은 간단하지만,당신이 볼 수있는 깊은 FileChannel/등을 사용하 memorymapped I/O 가을 통해 윈도우의 데이터습니다.

어떤 것이 있는 자바 관련 효율 팁?

는 정말에 따라 달라집으로 무엇을 하고 있는 데이터 자체적으로!

없이 추가적인 통찰력으로 어떤 종류의 처리에,여기에 몇 가지 일반적인에서 생각할 때 나는 유사한 일이다.

  1. 쓰기 프로토타입은 응용 프로그램의(아마도"하나 던져")를 수행하는 일부를 임의의 작업에서 당신의 데이터를 설정합니다.얼마나 빨리합니다.는 경우에 가장 간단하고 순진한 것은 생각할 수 있는 가능하 빠르고,아무 걱정 없습니다!

  2. 는 경우에 순진한 접근,작동하지 않을 고려 pre-데이터 처리는 이후 실행이 실행에서 허용되는 시간의 길이.당신이 언급 하"이동"주위에서 데이터를 설정합니다.어떤 방법으로 사전 프로세스는가?또 하나의 사전 처리할 수 있는 단계를 생성하는 경우에도 많은 데이터 인덱스는 데이터 제공하는 바이트에 대한 정확한 위치 정보를 중요하고,필요한 부분을 데이터를 설정합니다.그 후,당신의 주요 공정 실행을 활용할 수 있는 이 정보를로 바로 이동에 필요한 데이터이다.

그래서,요약,내 방법 것을 시도해 무언가가 간단한이 지금 무엇을 참조하십시오 성능을 것 같습니다.어쩌면 그것은 잘 될 것입니다.그렇지 않으면 찾으로 처리하는 데이터는 여러 단계를 절감 가장 비싼 운영을 위한 자주 사전 처리합니다.

지 않"모든 것을 로드 메모리로".그냥을 수행 파일에 액세스하고 운영 체제의 디스크에 페이지를 캐쉬로 결정을 얻을 때 당신이 실제로 당겨 것을 직접적으로 메모리가 부족합니다.

이에 많이 의존 파일에서 데이터.큰 메인프레임되었을 순차적으로 데이터 처리를 위해 오랜 시간 그러나 그들은하지 않는 일반적으로 사용하는 무작위에 대한 액세스는 데이터입니다.그들은 단지 그것을 당기에 라인에서 시간과 프로세스는 훨씬 앞서게 됩니다.

랜덤 액세스가 자주를 구축하기 위해 최선을 다하 객체를 캐싱이 래퍼는 알고 어디에 있는 파일은 필요한 데이터를 생성한다.필요할 때 읽은 데이터와 구조다.이 방법으로 메모리가 꽉 시작할 수 있습니다 죽이고 떨어져 물건을 너무 많이 걱정하지 않고 할 수 없는 것에 대해 나중에 다시 얻을 수있는.

당신이 정말로하지 않은 우리에게 충분히 정보를 당신을 도울 수 있습니다.필요할을 로드하는 각 파일에서 entiretly 로 처리하기 위해서는?또는 할 수 있습니다 프로세스 그 선?

선적 전체 파일에 시간을 초래할 가능성이 가난한 성도는 파일에 대한되지 않는 정말 큰 있습니다.당신의 최선의 방법은 정의 버퍼 크기는 작품을 위해 당신고 읽기/프로세스는 데이터 버퍼니다.

내가 찾 Informatica 하는 것이 매우 유용 데이터 처리를 도구입니다.좋은 소식은 더 많은 최근 버전에도 허용하 Java 변환합니다.만약 당신이 다루는 테라바이트 규모의 데이터를,그것은 시간이 될 수 있습을 조랑말에 대한 최고의 ETL 도구입니다.

나는 가정으로 뭔가를 하고 싶 처리 결과 같이,여기에서 어딘가에 저장.

는 경우에 귀하의 수치 데이터는 정기적으로 샘플링하고 당신이해야 할 랜덤 액세스를 고려하에 저장할 쿼드 트.

나는 강력 추천을 활용하여 정기적인 표현으로 찾고"새로운"IO nio 패키지에 대한 빠르게 입력한다.다음으로 이동해야한 한 빨리를 현실적으로 기대할 수 있습니다 기가 바이트의 데이터 갈 수 있습니다.

가능한 모든 경우에,데이터를 얻을 수 있으로 데이터베이스입니다.다음을 활용할 수 있습니다 모든 인덱싱,캐싱,메모리에 고정,그리고 다른 기능을 사용할 수 있다.

액세스해야 하는 경우에 데이터를 두 번 이상으로 로드하는 데이터베이스.대부분의 데이터베이스는 일종의 대량 적재 유틸리티입니다.데이터 수 있는 모든 메모리 크기에 맞고,당신이 필요하지 않 주위를 유지하거나 액세스가 종종,당신은 아마도 수 있습니다 뭔가를 쓰고 간단한 Perl 에서 또는 당신의 좋아하는 스크립트 언어입니다.

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