문제

어느 정도 지리 참조 그리드에 다양한 시계열 데이터가 저장되어 있습니다.위도와 경도 0.2도당 하나의 값입니다.현재 데이터는 텍스트 파일에 저장되어 있으므로 연도 251일에 다음을 볼 수 있습니다.

251
 12.76 12.55 12.55 12.34 [etc., 200 more values...]
 13.02 12.95 12.70 12.40 [etc., 200 more values...]
 [etc., 250 more lines]
252
 [etc., etc.]

나는 추상화 수준을 높이고, 성능을 개선하고, 취약성을 줄이고 싶습니다(예를 들어 현재 코드는 기존 코드 두 개 사이에 하루를 삽입할 수 없습니다!).우리는 BLOB-y RDBMS 해킹을 사용하고 텍스트 파일 형식의 각 줄을 테이블의 행으로 복제하기도 했습니다(타임스탬프/위도 쌍당 한 행, 경도 증분당 한 열 - 예!).

"실제" 지오데이터베이스로 이동할 수 있지만 위도와 경도를 사용하여 각 개별 값에 태그를 지정하는 오버헤드가 너무 커 보입니다.데이터의 크기와 해상도는 10년 동안 변하지 않았으며 앞으로도 그럴 것 같지 않습니다.

나는 모든 것을 NetCDF 파일에 저장하려고 애쓰고 있지만 파일 사고방식을 완전히 지날 필요가 있다고 생각합니다. 모든 소프트웨어가 날짜부터 파일 이름을 파악하고 여러 해 동안 여러 파일을 처리해야 하는 등의 작업을 하는 것이 싫습니다. .10년 동안의 모든 데이터를 단일 파일에 저장하는 대안도 실행 가능해 보이지 않습니다.

기발한 아이디어나 제품이 있나요?

도움이 되었습니까?

해결책

귀하의 의견을 여기에 정리했습니다.

  1. 나는 "내 자신의 파일 I/O 코드를 작성하지 않고" 이 모든 작업을 수행하고 싶습니다.
  2. "Java Ruby MATLAB" 및 "FORTRAN 루틴"에서 액세스해야 합니다.

이를 추가하면 새로운 파일 형식을 원하지 않을 것입니다. 당신이 가지고 있는 것을 고수하세요.

첫 번째 요구 사항을 완화할 수 있다면, 즉 자신만의 파일 I/O 코드를 작성하려는 경우 몇 가지 흥미로운 옵션이 있습니다.저는 C++ 클래스를 작성하고 SWIG와 같은 것을 사용하여 필요한 여러 언어에서 새 클래스를 사용할 수 있도록 만들었습니다.(그러나 SWIG를 사용하여 Java, Ruby, MATLAB 및 FORTRAN에서 액세스할 수 있을지는 확실하지 않습니다.다른 것이 필요할 수도 있습니다.나 자신도 어떻게 해야 할지 잘 모르겠습니다.)

"사실 파일이 있어야 한다면 필요할 때 직접 들어가서 편집할 수 있기 때문에 텍스트를 더 선호해요."라고 말씀하셨죠.

내 믿음은 이것이 잘못된 진술이라는 것입니다.자신만의 파일 I/O 루틴을 만들고 싶다면 할 수 있는 매우 영리한 일이 있습니다...그리고 궁극적인 대안으로 새 파일 형식을 이전에 사용했던 것과 동일한 텍스트 형식으로 변환하는 도구를 직접 제공할 수도 있습니다.그리고 다시 변환하는 또 다른 도구입니다.이 내용은 포스팅 마지막에 다시 말씀드리겠습니다...

제가 다루고 싶은 말씀을 하셨습니다.

"40년 DB 최적화 활용"

데이터베이스는 래스터 데이터가 아닌 관계형 데이터를 위한 것입니다.다른 사람의 DB를 활용하지 않습니다. 최적화 이런 종류의 데이터로.데이터를 DB에 밀어넣을 수도 있지만 이는 거의 동일하지 않습니다.

귀하께서 우리에게 말씀하신 모든 내용을 바탕으로 제가 말씀드릴 수 있는 가장 유용한 정보는 다음과 같습니다. 당신은 이렇게 말했습니다.

"저는 최적화에 더 관심이 있어요. 나의 실행 속도는 좋지만 CPU보다 시간이 더 걸립니다!"

솔직히 말해서 도구가 필요합니다.텍스트 파일로 생각하지 마세요.당신이 수행하는 일반적인 작업에 대해 생각하기 시작하고, 어떤 언어로든 작은 도구를 작성하여 이러한 작업을 사소한 일로 만드십시오.

그리고 도구의 성능이 형편없는 것으로 판명된다면?추측해보세요. 이는 일반 텍스트 파일이 조잡한 형식이기 때문입니다.하지만 그것은 단지 내 의견일 뿐입니다.:)

다른 팁

확실히 텍스트에서 바이너리로 변경하겠지만 매일 별도의 파일에 보관합니다.파일 이름에 날짜와 가능한 시간을 포함하는 등 그 사이에 삽입해도 인덱스에 이상 현상이 발생하지 않는 방식으로 이름을 지정할 수 있습니다.예를 들어 위치당 여러 필드가 있는 경우 파일 구조를 고려할 수도 있습니다.많은 시간 단계에서 작은 타일을 찾는 것이 일반적입니까?이 경우 며칠 동안의 데이터가 포함된 타일로 저장할 수 있습니다.데이터를 효율적으로 구성하는 데 큰 역할을 하는 데이터에 액세스하는 방법은 언급하지 않았습니다.

설명:

태그 중 하나로 "데이터베이스"를 추가하고 이를 옵션으로 고려했다는 사실에 놀랐습니다.왜이 짓을 했나요?

기본적으로 모든 시간 단계마다 2D 단일 구성 요소 부동 소수점 이미지가 있습니다.귀하의 데이터를 이러한 방식으로 보는 것에 동의하시겠습니까?

당신은 또한 두 개의 기존 날짜 사이에 하루를 삽입하고 싶다고 언급했는데, 이는 매우 이상한 일인 것 같습니다.왜 그렇게 해야 할까요?5월 4일과 5월 5일 사이에 제가 모르는 새로운 날이 있나요?

"압축"이 당신이 관심을 갖는 것 중 하나입니까, 아니면 플랫 파일에 질렸습니까?

데이터를 저장하는 데 float 또는 double이 충분합니까, 아니면 더 임의의 정밀도가 필요하다고 생각하십니까?

또한 이 데이터에 어떤 프로그래밍 언어로 액세스하고 싶나요?

데이터를 저장하는 방법에 대한 대답은 전적으로 데이터로 무엇을 하려는지에 달려 있습니다.예를 들어, 날짜나 날짜 범위를 지정하여 검색해야 하는 경우 데이터베이스에 BLOB로 저장하는 것이 합리적입니다.그러나 특정 값이 있는 레코드를 찾아야 하는 경우에는 다른 작업을 수행해야 합니다.

데이터에 액세스하려면 어떻게 해야 하는지 설명해 주세요/

Matt, 정말 고마워요. Longneck과 Jirv도 마찬가지예요.

이 게시물은 부분적으로 stackoverflow 담론의 품질을 테스트하는 실험이었습니다.너희들/여자들/외계 생명체가 대표적이라면 나는 마음에 든다.

그리고 요점에 있어서 당신은 내 생각을 상당히 명확하게 해 주었습니다.아직 꼭 그렇지는 않을 수도 있어요 구현하다 당신의 조언이지만 내가 그럴 것이라는 것을 알아주세요 생각 그것에 대해 매우 진지하게.>;-)

파일 형식을 동일하게 유지하고 기존 C 및/또는 Ruby 루틴에 추가하여 부족한 몇 가지 저수준 기능(예:누락된 시간 단계 삽입), HTTP 프런트 엔드를 전체에 걸어 현재 어떤 언어로든 필요한 상자에서 데이터를 사용할 수 있도록 합니다.이러한 데이터를 구성하는 것은 대부분 변하지 않는 레거시 소프트웨어이지만 우리는 항상 이를 위한 새로운 소비자를 찾고 있으므로 다중 언어/다중 컴퓨터 요구 사항(이런, 그거 잊었나요?)은 읽기 측면에 적용됩니다. 글쓰기 쪽.이는 또한 수많은 보안 문제를 방지합니다.

다시 한 번 감사드립니다.

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