전체 파일을 읽고 쓰지 않고도 다양한 위치에서 큰 바이너리 파일에 액세스하는 효율적인 방법을 찾고 있습니다.대용량 파일의 작은 변경 사항을 빨리 저장하는 방법은 무엇입니까?
파일이 라인의 매우 높은 숫자로 구성 할 각 예를 들어 고정 길이 데이터 및 다양한 길이의 데이터를 포함 :
<id><type><some_atributes><just_few_bytes>\n
<id><type><some_atributes><block_holding_KB_of_data>\n
<id><type><some_atributes><some_other_bytes>\n
...
내 목표는 특정 ID에 뛰어와 기록을 덮어 쓰기하는 것입니다 새로운 데이터.
나는 seek()
과 fwrite()
생각했지만 문제는 읽기/행의 끝 각 바이트를 확인하지 않고 효율적으로 작성하는 방법에 seek()
를 우측 라인/위치인가? 데이터베이스에 비슷한 문제가 있습니까?
지능적으로 파일을 청크로 분할하는 방법 ... 관련 청크를 수정하고 완료되면 전체 파일을 어셈블 하시겠습니까? – WhiZTiM
이 질문보기 : https://stackoverflow.com/q/43006281/1865694. –
고정 길이의 내용을 별도의 파일에 넣거나 처음에 넣는 것은 어떨까요? 그리고 각 항목에 대해서도 해당 조각이있는 파일에 오프셋을 저장합니다. 그런 다음 고정 크기 색인을 사용하면 임의 액세스가 가능합니다. 레코드 당 다중 읽기로 인한 적중률을 줄이려면 색인에 직접 저장되는 소수의 데이터 바이트를 선택하십시오. 그러나 동일한 스펙에서 "라인"과 "KB의 데이터"에 관해 이야기하는 것은 이상하게 보입니다. 바이너리라면, 당신은 "\ n"을 원하지 않거나 원하지 않는다. – Peter