저는 IPC에 대한 newbee입니다. Writer 프로세스는 데이터를 공유 메모리에 씁니다. 많은 독자 프로세스가 데이터를 읽습니다. 기록 할 데이터에는 고유 한 식별자가 있으며 빠른 액세스 (예 : STL :: map 또는 조회 용 해시 맵)를 위해 고유 한 키로 인덱싱해야합니다. 또한 데이터는 가변 길이 레코드 (XML)입니다 (평균 길이는 200-250 바이트). OS는 Intel Xeon Quad Core Server에서 solaris 10 (i86pc)입니다.가변 길이 레코드 용 C++의 잠금없는 공유 메모리
총 데이터 크기가 200G 이상입니다. 그러나 우리는 공유 메모리에 최신 데이터 만 보관할 것입니다. 기록 데이터는 파일에 있습니다. 공유 메모리 크기는 약 4G ~ 6G 정도입니다.
부스트 :: 간 같은 avaiable이다 없음 외부 라이브러리
나는 질문의 커플이 될 수있는 많은 더 효율적입니다
- :
- 방법 shared_memory 또는 mmap를 (메모리 매핑 된 파일) 가변 길이 레코드에 대한 인덱스를 작성하십시오. [나도 몰라, 약간의 해싱이있을 수 있니?].
- XML을 고정 크기 구조로 변환하면 깔끔하게 정리할 수 있습니까? (구조체의 크기는 대략 300+ 가깝습니다)
- 맞춤 할당기를 제공하여 shared_memory에 STL을 배치 할 수 있습니까?
- 세마포어없이 구현할 수 있습니까 (CAS를 사용하여 잠금없는 구현).
감사합니다 이것에 대해
어떻게
.|--------------------------|
| start_id | end_id | -> range of msg id present in the segment
|--------------------------|
| id1 | start_mem | length | ->
|--------------------------| ->
| id2 | start_mem | length | -> table of index for the actual data
|--------------------------| ->
| id3 | start_mem | length | ->
|--------------------------| ->
| id4 | start_mem | length | ->
|--------------------------| ->
| |
| |
| |
| data segment |
| varibale length |
| xml are stored |
| |
| |
|--------------------------|
새 데이터가 도착하고 세그먼트가 가득 찬 경우. 가장 오래된 데이터는 순환 방식으로 지워집니다. 지워지는 레코드가 두 개 이상일 수 있습니다.
어떤 컴파일러를 사용하고 있습니까? – pyCthon
제목에 질문을 기술하십시오. 사실, 우리가 그곳에있는 동안, 이것은 _ _ _ _ _ _ 질문입니다. 그것들을 게시하십시오. –
독자가 동일한 데이터를 읽어야합니까? 모든 프로세스에 대해 키 수가 고정되어 있습니까? – Karlson