.
주제넘은 얘기일지는 몰라도 문제 정의가 잘못되어 있는것 같습니다.
현실적으로 10억개의 수를 한꺼번에 핸들링해야 하는 경우는 없다고
생각합니다.
10억개의 수가 유일한지 비교하는 시간이 너무 오래 걸리는 것도
커다란 문제 입니다.
.
1 byte = 8 bit 로 구성된다는 것을 이용해서 1/8로 메모리 용량을
줄일 수 있지만 그래도 1,000,000,000 / 8 = 125,000,000 ( 약 120메가 )
정도를 사용하게 됩니다.
추천하고 싶은 방법은 100K 정도의 공간을 검색하는 Class를 만들고
그 Class의 Object를 10개 정도( 그래도 1Mega 가까이 ) 메모리에
생성합니다.
그리고 새로운 수가 메모리에 생성되어 있는 클래스의 영역이 아니라면
파일에서 읽어오고 또, 파일에 그 영역이 생성되어 있지 않다면 다시
100K 정도의 영역을 만드는 방법으로 하면 될 것 같습니다. DB Table에
Blob field를 만들어서 사용하는 것도 괜찮을 듯 합니다.
Class에 자신의 수 영역을 기록하는 멤버 변수를 만들어야 하고, 그
것을 파일로 기록하는 부분도 만들어야 합니다.
Key는 1 byte = 8 bit 이라는 것과 class object에 기록된 수 영역을
Segment로 잡고, Offset으로 100K의 메모리 공간을 이동하면서 각 Bit가
켜져 있는지 꺼져있는지 검사하는 것입니다.
지금은 업무 시간이라 예제를 만들어 드릴 수 없습니다. Class 구현에
자신이 있으시다면 직접 구현해 보시는 것도 좋으리라 생각됩니다.
지금은 컴퓨터 시스템이 너무 좋아서 클래스와 스레드로 잘만 돌리면
실시간에 가깝게 접근할수 있을지도... ^^;;
ps : 286에서 1mega 짜리 file을 만들어 본적이 있는데 몇초 걸렸었것
같으네요... 요즘은 시스템이 좋아서... ^^;;
|