我在一个平坦的db4o表中有200万行。重复了很多信息 - 例如,第一列只有三个可能的字符串。
我可以很容易地将表分成4层层次结构(即从root>>>>>>>>>最终表格导航) - 但是从速度和软件维护点来看这是值得的观点?
如果事实证明将表拆分为层次结构会更清晰,那么在当前的db4o框架中有什么建议可以实现这个目标吗?
问题解答
要真正回答你的问题,我 需要更多信息。哪一种 您存储的信息?
我正在存储包含字符串和双精度的对象。从概念上讲,层次结构就像一个带有目录,子目录和子子目录的文件系统:单个根节点包含一个子类数组,每个子类又包含其他子子数组-classes等。以下是代码示例:
// rootNode---|
// sub-node 1----|
// |-----sub-sub-node 1
// |-----sub-sub-node 2
// |-----sub-sub-node 3
// |-----sub-sub-node X (others, N elements)
// sub-node 2----|
// |-----sub-sub-node 1
// |-----sub-sub-node 2
// |-----sub-sub-node 3
// |-----sub-sub-node X (others, N elements)
// sub-node 3----|
// |-----sub-sub-node 1
// |-----sub-sub-node 2
// |-----sub-sub-node 3
// |-----sub-sub-node X (others, N elements)
// sub-node X (others, N elements)
class rootNode
{
IList<subNode> subNodeCollection = new List<subNode>();
string rootNodeParam;
}
class subNode
{
IList<subSubNode> subSubNodeCollection = new List<subSubNode>();
string subNodeParam;
}
class subSubNode
{
string subSubNodeParam;
}
// Now, we have to work out a way to create a query that filters
// by rootNodeParam, subNodeParam and subSubNodeParam.
答案是什么 是您的数据的访问模式? 正在通过查询读取单个对象 /搜索。或者你正在阅读很多 与每个相关的对象 其他?
我正在尝试向下导航树,按我的方式按参数过滤。
一般来说db4o(和其他对象 数据库)擅长导航 访问。这意味着你先 查询一些对象,并从那里 导航到相关对象。对于 例如,您首先查询一个 用户对象。从那里你导航 给用户家,城市,工作,朋友 等对象。这种访问有效 在db4o中很棒。
这正是我正在尝试做的,如果在类和子类之间只有1-1映射,那么在db4o中究竟有什么效果。如果你通过在类中实现类的ArrayList来实现1对多,那么在没有实例化整个树的情况下它就无法进行查询 - 或者我是否误导了这个?
所以在你的例子中你的情况 4层层次结构可以很好地工作 db4o,但仅限于您可以导航 从根到符号对象和 等等。这意味着根对象 有它的集合 “children'对象
是 - 但如果每个子节点都包含一个集合,有没有办法进行查询?
答案 0 :(得分:3)
正如Sam Stainsby在他的评价中已经指出的那样,db4o没有表格的概念。它存储了对象,这就是db4o的存储单元。不要试图用表来思考,这对db4o不起作用。
正如你所说,你重复信息,这是一个很好的候选者,可以在其他对象中分开,然后可以被其他对象引用。总的来说,我首先要设计一个好的域模型,以了解数据的组织方式和相互关联。并考虑您拥有什么样的数据访问模式。然后尝试找出如何以与db4o一起使用的方式设计类/对象。
要真正回答您的问题,我需要更多信息。你存储什么样的信息? Ans您的数据的访问模式是什么?通过查询/搜索读取单个对象。或者你正在阅读很多彼此相关的对象?
通常,db4o(和其他对象数据库)擅长导航访问。这意味着您首先查询某些对象,然后从那里导航到相关对象。例如,您首先查询用户对象。从那里您导航到用户家庭,城市,工作,朋友等对象。这种访问在db4o中很有用。
因此,在您的示例中,4层层次结构可以与db4o一起使用,但只有当您可以从根目录导航到符号对象时,依此类推。这意味着根对象具有其“子”对象
的集合 顺便说一下:如果您认为根据数据表进行思考更为自然,那么我建议您使用关系数据库。关系数据库在处理表时非常棒。