我有一个大约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ínMLópezMuñoz(Boost.MultiIndex的开发人员)的回答。 aswer 是。可以使用Boost.Interprocess在进程之间共享multi_index。有关详细信息,请参阅this link
答案 0 :(得分:3)
你看过Boost.Interprocess吗?
答案 1 :(得分:2)
你有没有想过将它切成碎片。
并发访问很难。难以正确,难以维持,难以推理。
另一方面,10GB非常大,我想知道你是否可以对你的数据进行聚类。保持相同的index
结构,但根据某些条件(例如,大id)将其分配到10个(或更多)独立对象中。
通过这种方式,您可以自然地将每个块与另一个块分开处理,而无需首先处理并发访问。