私はnewbee to IPCです。 Writerプロセスは、データを共有メモリに書き込みます。多くのリーダープロセスがデータを読み取ります。書き込まれるデータには一意の識別子があり、より高速なアクセスのために一意のキーで索引付けする必要があります(参照のためのSTL :: mapまたはhashmapなど)。また、データは可変長レコード(XML)です(平均文字数は200〜250バイトです)。 OSはIntel Xeon Quad Core Server上のsolaris 10(i86pc)です。可変長レコード用C++のロックフリー共有メモリ
合計データサイズが200Gを超えています。しかし、私たちは共有メモリに最新のデータだけを保存します。履歴データはファイルに保存されます。共有メモリサイズは約4G〜6Gです。
ブースト::プロセス間などの盛ん外部ライブラリ
私が質問のカップルは、かもしれ持っている多くの方が効率的である
- :
- どのようにSHARED_MEMORYかのmmap(メモリマップドファイルを)可変長レコードの索引を作成します。 [私は考えていない、いくつかのハッシングかもしれない?]。
- XMLが固定サイズの構造に変換されている場合、これはきちんとしているでしょうか?(構造のトレードオフは300以上の可能性のあるフィールドがあります)
- カスタムアロケータを提供することでSTLをshared_memoryに配置できますか?
- セマフォなしで実装することは可能ですか(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 |
| |
| |
|--------------------------|
新しいデータが到着し、セグメントがいっぱいになったとき。古いデータは循環的に消去されます。 1レコード以上の消去が必要になる可能性があります。
どのコンパイラを使用していますか? – pyCthon
タイトルに質問を記入してください。実際には、私たちはそこにいる間、これは_five_質問です。それらを投稿してください。 –
読者は同じデータを読まなければなりませんか?すべてのプロセスでキー数が固定されていますか? – Karlson