간단한 k-v db 형태 구현 중인데
저장해야하는 용량이 1tb정도임
폴더 하나에 4gb씩 256개정도로 쪼개서 저장할려고 하고
index, insert, select 까진 괜찮았는데
update랑 delete가 문제네
저장해야하는 데이터가 고정길이가 아니라 가변이라서
1byte에서 1mb 정도 되고
갯수 상관없이 20mb정도 수정하는 속도가 0.5초 내외정도 되어야하는데..
양놈들 질문 답변이 죄다 전체 읽어서 고치라는 말 뿐이네 ㅜㅜ
지금 생각중인건
1. 파일 걍 1gb로 쪼개고 update 할때마다 메모리에 싹다 넣고 고친다
2. 파일 수정본을 tmp파일로 만들어서 fseek으로 대충 고쳐본다
3. 내가 모르는 싱기방기한 방법을 찾아본다
정도인데 갤럼들아 도와줘..
저장해야하는 용량이 1tb정도임
폴더 하나에 4gb씩 256개정도로 쪼개서 저장할려고 하고
index, insert, select 까진 괜찮았는데
update랑 delete가 문제네
저장해야하는 데이터가 고정길이가 아니라 가변이라서
1byte에서 1mb 정도 되고
갯수 상관없이 20mb정도 수정하는 속도가 0.5초 내외정도 되어야하는데..
양놈들 질문 답변이 죄다 전체 읽어서 고치라는 말 뿐이네 ㅜㅜ
지금 생각중인건
1. 파일 걍 1gb로 쪼개고 update 할때마다 메모리에 싹다 넣고 고친다
2. 파일 수정본을 tmp파일로 만들어서 fseek으로 대충 고쳐본다
3. 내가 모르는 싱기방기한 방법을 찾아본다
정도인데 갤럼들아 도와줘..
ㅜㅜ 퇴근해야하는디
헤더 만들고 fseek 어디로할지 테이블 짜놓기
그건 해놧엉
그럼 머가 문제임
index도 구현해놔서 fseek으로 쥰내 빠르게 위치 찾기까지 가능한디 딱 그 부분만 지우는 함수가 아예 없나보네
중간에 용량바뀔때?
ㅇㅇ update할 데이터가 가변길이인거랑 delete하고 다시 파일 합칠때 용량 너무 커서 속도가 느린게 문제
k-v면 max len 제한해도 될텐데, 128k, 512k, 1024k 블럭 만들고 거기디 그냥 쑤셔 박으셈 800k면 1024k블럭에 넣고 나머지 공간 버리고
이거보다 빠르게 할수가없음
파일에 순서대로 쓰는게 아니라 블록 할당하고 헤더로 찾는방법 뿐인가
60kb 저장 -> 128k 슬롯에 박은다음 나머지 공간 버림 60kb -> 200kb로 수정됨 -> 슬롯 뺀다음 256k 슬롯으로 이동 200kb -> 60kb -> 위에거 반대로
근데 그러면 파일 안에서 블록 나누는 법만 만들면 되는건가
음.. 그러면 128k 슬롯인지 1k 슬롯인지 구분하기 위한 방법이 이제 또 문제네 ㄱㅅㄱㅅ
각 슬롯이 몇개나 필요할 지 내가 예측할 수가 없는데 이건 고민을 좀 해봐야겠다..
예측을왜함 그냥 500개씩 만들고 501번째 insert할때 500개 더 늘리셈
빈 슬롯은 그냥 버리는 용량으로 생각해야겠네