2011-03-02 3 views
4

많은 파일과 함께 작동하는 시스템을 개발 중이며 하드 디스크로 정보 검색 속도를 향상시키는 것에 대해 읽은 일부 Google 검색을 수행하고 있습니다. 그러나 Java로 작업하기 때문에이 문제를 해결할 라이브러리를 찾을 수 없습니다. C++에서 매우 모호한 지식을 가지고 있으며 IOCTL으로 하드 디스크 정보 검색에 대한 정보를 찾았습니다. 분명히 하드 디스크에서 얼마나 많은 인접한 자유 블록을 얻을 수 있는지, 연속적인 자유 블록의 최대 개수와 같은 구체적인 정보를 얻을 수있는 방법이 없습니다. 현재 Windows 7 및 XP에서 작업하고 있습니다. JNI 사용에 대해 알고 있지만 C++에 강한 문제가 있습니다. 그러나 C++ 솔루션을 검색해도 아무 것도 찾을 수 없습니다. Google에서 잘못된 검색어를 사용하고있을 수도 있습니다. 누군가 나에게 학습이나 제안 등의 링크를 주시겠습니까? 나는 C++을 공부하려고한다. (자유 시간은 거의 없다.)어떻게 연속 디스크 공간을 할당합니까?

대단히 감사합니다!

PS 편집 : 사실상 아무런 차이가 없다는 것을 알고 있습니다. 그러나 나는 이것에 대해 정말로 배울 필요가있다. 그러나 조언을주는 모든 사람에게 감사합니다.

+4

이렇게해야하는 수준보다 낮습니다. – delnan

+2

Windows에서 Java의 [FSCTL_MOVE_FILE] (http://msdn.microsoft.com/en-us/library/aa364577.aspx)를 호출해야하지만이 작업을 수행하는 방법을 모릅니다. 쉬웠다. 다른 플랫폼에서도 여전히 아무 것도 할 수 없었다. – Mehrdad

+0

이것은 파일 시스템에 크게 의존하므로이 기능이 정말 필요하다면 지원할 FS를 하나만 선택하는 것이 나을 것입니다. ext4는 좋은 후보자처럼 들리지만, 너무 많은 것을 알고, 그래서 내 말을 듣지 마라.:) – biziclop

답변

1

AFAIK에는 100 % 순수 Java 솔루션이 내장되어 있지 않습니다. 문제는 해당 종류의 정보를 검색하는 것은 플랫폼에 따라 다르며 Java는 플랫폼 독립적이어야하므로 공통 하위 집합 만 사용할 수 있다는 것입니다.

+0

현재 특정 운영 체제 솔루션은 Windows 7 또는 Windows XP입니다. 그래서 IOCTL에 대해 알게되었습니다. – mrcaramori

8

성능 문제를 확인 했습니까? 그렇지 않다면 아무 것도하지 마십시오.

디스크의 실제 파일 배포가이 성능 문제의 원인입니까? 그렇지 않은 경우 응용 프로그램에서 시간이 소비되는 위치를 측정하고 알고리즘을 개선하고 필요하면 캐시를 도입하십시오.

이 모든 작업을 수행하고 성능 문제의 원인이되는 파일을 디스크에 물리적으로 배포 한 것이 확실한 경우 더 빠른 디스크를 구입하거나 여러 디스크를 사용하려고 생각하십니까? 하드웨어는 개발 시간보다 훨씬 저렴합니다.

디스크의 파일을 물리적으로 배포하는 것이 앱의 성능에 중요한 영향을 미칠지 의심 스럽습니다. 나는 다른 곳에서 먼저 검색 할 것이다.

+0

소프트웨어는 데이터 관리에 관한 것이므로 디스크 관리가 필요하므로 다른 방식으로는 해결할 수 없습니다. 당신의 답변에 감사드립니다. 최적화의 첫 번째 규칙은 – mrcaramori

+0

입니다. http://c2.com/cgi/wiki?RulesOfOptimization – cmcginty

1

Captain Kernel은 here이 반드시 디스크 성능을 향상시키지 않을 것이며 광범위한 작업 없이는 불가능하다고 설명합니다.

1

NTFS는 Windows 7 엔지니어 this blog post에서 설명한 것처럼 파일을 연속적으로 할당하려고합니다. 충분한 여유 공간이 충분히 크지 않으면 파일이 조각화됩니다.

파일을 조각화하지 않는 것이 중요하다고 생각하면 디스크의 야간 조각 모음을 예약하는 것이 가장 좋습니다. 그것은 시스템 관리 문제에 가깝습니다.

마지막으로, fragmentation is irrelevant on SSD disks.

관련 문제