출처 : Shared Memory로 DB 만들때의 문제점.
db로 사용되는 튜플들의 관리를 배열처럼 (시작점)의 offset 으로 관리해줌으로써 가능하다.
데이터에 접근하는 프로세스마다 (시작점)에 대해서 서로 다른 포인터값을 갖게 되기때문이다.
공유메모리에 데이터를 넣는 방식.
(시작점)
|<--- 테이블 내용 --->|<--- n개의 튜플내용(트리 node정보 등) ---->|
|<----- n개의 키 ----->|<------------ n개의 데이터 -------------->|
"테이블 내용"과 "n개의 튜플내용"은 "정적인 크기"를 갖는다.
typedef struct _tbl-
{
int root ;
int used ;
int free ;
int head ;
int tail ;
...
} tbl_t ;
typedef struct _tuple_
{
int left ;
int right ;
int prev ;
int next ;
...
}
키와 데이터로 사용될 내용이 정의되면 그 구조체 또한 정적으로 정의될 수 있다.
typedef struct _key_
{
unsigned int ip;
unsigned int pcf ;
} key_t ;
typedef struct _data_
{
int field1 ;
long long body ;
}
초기화 함수에서
"테이블내용 + (n x 튜플내용) + (n x 키내용) + (n x 데이터내용)" 만큼의 메모리를 할당한다.
그리고 key와 data가 있는 offset 만 알고 있다면 문제가 없을 것 같다.
ps. 더 좋은 아이디어가 있다면 조언 좀 >.,<
'UNIX_LINUX_C_C++' 카테고리의 다른 글
[공유메모리] Shared Memory를 이용한 프로세스간 통신 (0) | 2011.10.16 |
---|---|
jinie_lib_winwock2 (0) | 2011.10.16 |
dialogic programming example - async mode (0) | 2011.10.16 |
select 함수를 이용한 채팅 서버 (1) | 2011.10.16 |
날짜,pthread,도메인 (0) | 2011.10.16 |