ipc 선택의 문제
글쓴이: seeker / 작성시간: 목, 2003/03/20 - 7:31오후
한 프로세스가
struct {
char name[20];
int age;
} 와 같은 간단한 구조체 데이터를 IPC형태(fifo,msg Q,shared memory...)에 써줍니다.
또 한 프로세스는 그것을 꺼내읽어서 비즈로직을 처리하면됩니다.
대략 저와같은 간단한 구조체데이터가 순간적으로 100만건 정도 발생하는데요.
이와 같을때 적당한 ipc는? ( 데이터는 간헐적으로 생성되고요, 발생되는 건수는 가변적임 . 평상시 발생할때마다 100건미만일수있으나 새벽에 최고 100만건이 발생함.)
제생각에는 message que로 하면 딱일것같은데 용량문제가 걸리네요.
max 100만건정도의 수용할수 있는게 뭐가좋을까요?
그리고 맥스 100만건이 중복된 데이터일경우 구조체를 생성해주는 프로세스가
중복되지 않게 기존데이터를 검색할수 있는 ipc가 있을까요? (-> 이것은 필수조건은 아니고, 가능하면 좋음)
Forums:
100만건 * (24bytes + 데이터관리 오버헤드)
데이터의 사이즈나 건수로 봐서는 ipc계열 보다는,
파일 기반이 더 좋을꺼 같군요...
또, 그냥 파일 보다는, 중복을 체크 해야 하는 것도 있으니..
cisam이나 index가 지원되는 것을 사용하면 충분히
빠를듯 합니다.
업무 프로세스에게는 시그널이나,
udp로 할일이 있음을 알려주어도
될듯 하구요..
울랄라~ 호기심 천국~!!
http://www.ezdoum.com
그런경우에는..
메모리가 만땅 충분한 경우에는
shared memory + semaphore
가 가장 빠를겁니다.
cisam계열이나 메모리DB가 적당할것 같군요.
윗분 말씀대로 cisam 을 사용하시거나(c-isam은 속도는 무지 빠릅니다. 다만 옛날꺼라서 조금 호환에서 떨어집니다. 만일 쓰레드를 쓰신다면 d-isam을 쓰셔야 합니다) 메모리가 많고, 휘발적인 성격이 강하다면 memory db를 쓰시면 됩니다.
========================================
* The truth will set you free.
메모리 DB?
개인적으로 고민해봤는데요.
파일에 레코드LOCKing을 이용할까싶었는데요.
메모리 db는 어떤건지요?
첨듣는지라...
berkley db 써보세요^^;
:wink:
www.sleepycat.com
화일 base의 db입니다.api도 제공됩니다.
게다가 한쌍으로 들어가는 값일 경우라면 더욱 좋습니다.
In the UNIX,
화일 시스템은 지평적인 공간 감각을 제공하며 ,
프로세스는 생명을 갖는 생명체와 같아보인다.
--BACH
굳이 ipc를 쓰시겠다면
제생각도 filedb 를 사용하는것이 좋은 생각인것 같은데요
굳이 ipc를 쓰시겠다면
Shared Memory 는 글 올리신 분의 의도와는 조금 벗어난것 같고,
Message Queue 가 답이 될것 같은데, 용량이 문제라면,
/etc/sysctl.conf 파일에
kernel.msgmnb = 100000000(원하는 만큼, 단 realmemory 보다 작게)
추가 하시고 sysctl -p 하시면 됩니다.
혹은 커널소스중에서 ipc.h 파일에 뭐였는지 기억이 나지 않지만
define 된 것을 고쳐서 커널컴팔 해서 쓰시면 됩니다.
[quote]메모리 db는 어떤건지요? 첨듣는지라...[/quote]
Main Memory DataBase라구 하구요..
줄여서 MMDB라고 합니다.
대부분의 DB는 디스크 기반이고, 디스크기반에 최적화된 검색인덱스를
가지고 있습니다.
단순히 모든데이터를 메모리에 올려서 구동시키는것 뿐 아니라
메모리기반에서 최적화된 검색알고리즘을 가지고있습니다.
(자세한건 저도 잘 모르지만.. T-tree라구 하던가 머.. 이런저런게 있다더군요 )
국내에도 서너군데 업체에서 제품이 나왔을겁니다.
가끔은 밥을 굶어도 살 수 있다.
댓글 달기