我目前正面临设计问题。 我正在编写一个管理图表中“文档”的应用程序。 在图中,每个节点的队列中都有文档。
我最终选择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等产品管理自定义内存数据库? 你认为我走错了方向吗?
感谢。
Ž。