C ++:管理关系数据库中的内存中对象

时间:2013-12-19 15:41:48

标签: c++ mysql memory tree in-memory-database

我目前正面临设计问题。 我正在编写一个管理图表中“文档”的应用程序。 在图中,每个节点的队列中都有文档。

我最终选择MySQL来管理数据库并保留文档。 模式主要由两个重要的表组成:document和queueelement。 queueelement具有对文档的引用。 节点的队列是队列元素的列表。

基本上,这些课程如下:

class Document
{
    int id;
    string name;
    //... 
    // other attributes here
    //...

    std::map<string, string> attributes;

    void foo();
    void what();


};

class QueueElement 
{
    int id;
    int docid;
    int priority;
    string nodename;
};

class Node 
{
    std::list<QueueElementPtr> elements;
};

数据库架构很简单,我不需要更复杂的东西。

服务器应用正在管理节点。 基本上,当节点处于唤醒状态时,它会弹出队列中的第一个文档,对其进行处理并将其推送到子节点的队列中。

我之所以选择MySQL,是因为我不需要像Oracle这样的大型数据库,我不需要复杂的SQL查询。 我也选择了MySQL,因为我买不起像Versant或Objectivity这样的OODB。实际上,对象映射是关键。 我在试用模式下使用Versant DB,产品很棒......但实在太贵了。

我正在考虑如何在内存中高效加载我的图表。 一方面,我害怕陷入记忆不足的境地。 另一方面,我希望避免太多“选择”操作。

我不得不在内存中正确加载队列。 但是我认为我没有义务将“Document”对象保留在内存中,也许在节点处理它时用“select”加载它就足够了。

其实我不是数据库专家。我知道SQL以及如何使用各自的索引创建表。但我必须承认,我忽略了引擎如何优化I / O和内存方面。 在我的应用程序中,性能是一个优先事项。

此应用程序应在专用服务器上运行,MySQL数据库位于同一服务器上,不会托管任何其他架构。 我正在使用MySQL c ++连接器API,并且在初始化引擎时使用PreparedStatement对象预定义每个查询(插入,删除,更新)。

您如何使用MySQL等产品管理自定义内存数据库? 你认为我走错了方向吗?

感谢。

Ž。

0 个答案:

没有答案