我有一个大约 10Gb 的 Boost.MultiIndex 大数组。为了减少读取,我认为应该有一种方法将数据保存在内存中,并且另一个客户端程序将能够读取和分析它。
组织它的正确方法是什么?
数组看起来像:
struct particleID
{
int ID;// real ID for particle from Gadget2 file "ID" block
unsigned int IDf;// postition in the file
particleID(int id,const unsigned int idf):ID(id),IDf(idf){}
bool operator<(const particleID& p)const { return ID<p.ID;}
unsigned int getByGID()const {return (ID&0x0FFF);};
};
struct ID{};
struct IDf{};
struct IDg{};
typedef multi_index_container<
particleID,
indexed_by<
ordered_unique<
tag<IDf>, BOOST_MULTI_INDEX_MEMBER(particleID,unsigned int,IDf)>,
ordered_non_unique<
tag<ID>,BOOST_MULTI_INDEX_MEMBER(particleID,int,ID)>,
ordered_non_unique<
tag<IDg>,BOOST_MULTI_INDEX_CONST_MEM_FUN(particleID,unsigned int,getByGID)>
>
> particlesID_set;
欢迎任何想法。
亲切的问候阿尔曼。
编辑: RAM 和内核数量不受限制。目前我有一个 16Gb 和 8 核。
更新
我在 Boost.Users 论坛上问的同样的问题,我从 Joaquín M López Muñoz(Boost.MultiIndex 的开发者)那里得到了答案。答案是Yes。可以使用 Boost.Interprocess 在进程之间共享 multi_index。有关更多详细信息,您可以在此链接中查看