如果我在db4o数据库中有200万行,您会建议使用大型平面表还是层次结构?

时间:2011-02-24 01:15:14

标签: db4o

我在一个平坦的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'对象

是 - 但如果每个子节点都包含一个集合,有没有办法进行查询?

1 个答案:

答案 0 :(得分:3)

正如Sam Stainsby在他的评价中已经指出的那样,db4o没有表格的概念。它存储了对象,这就是db4o的存储单元。不要试图用表来思考,这对db4o不起作用。

正如你所说,你重复信息,这是一个很好的候选者,可以在其他对象中分开,然后可以被其他对象引用。总的来说,我首先要设计一个好的域模型,以了解数据的组织方式和相互关联。并考虑您拥有什么样的数据访问模式。然后尝试找出如何以与db4o一起使用的方式设计类/对象。

要真正回答您的问题,我需要更多信息。你存储什么样的信息? Ans您的数据的访问模式是什么?通过查询/搜索读取单个对象。或者你正在阅读很多彼此相关的对象?

通常,db4o(和其他对象数据库)擅长导航访问。这意味着您首先查询某些对象,然后从那里导航到相关对象。例如,您首先查询用户对象。从那里您导航到用户家庭,城市,工作,朋友等对象。这种访问在db4o中很有用。

因此,在您的示例中,4层层次结构可以与db4o一起使用,但只有当您可以从根目录导航到符号对象时,依此类推。这意味着根对象具有其“子”对象

的集合 顺便说一下:如果您认为根据数据表进行思考更为自然,那么我建议您使用关系数据库。关系数据库在处理表时非常棒。