Db4O激活深度,常见问题,Web应用程序的最佳实践

时间:2011-04-05 23:51:45

标签: c# configuration db4o

我们的数据库包含4,000,000条记录(sql server),它的物理大小为550 MB。 数据库中的实体彼此相关为图形样式。当我从具有5级深度的db加载实体时出现问题(所有记录都被加载)。

  • 是否存在类似Entity Framework的机制(包括(“MyProperty.ItsProperty”))

与db4O数据库一起使用的最佳类型是什么?

  • Guid,Gen​​eric Collections有什么问题吗?

  • 对于使用db4o的WebApplication,有什么最佳做法吗?会话容器+ EmbeddedDb4ODb或Client / ServerDb4O?

请求帮助..

好的解释。但我想把我的确切问题作为样本: 我有三个实体:( N-N关系.B是交叉点实体。概念:图形)


class A 
{
 public B[] BList;
 public int Number;
 public R R;
}
class B
{
 public A A;
 public C C;
 public D D;
 public int Number;
}
class C
{
  public B[] BList;
  public E E;
  public F F;
  public int Number; 
}

我想查询dbContext.A.Include(“BList.C.BList.A”)。包含(“BList.C.E.G”)。Where(....)

I want to get           :A.BList.C.BList.A.R
But I dont want to get  :A.R
I want to get           :A.BList.C.E.G
But I dont want to get  :A.BList.C.F
I want to get           :A.BList.C.E.G
But I dont want get     :A.BList.D

注意:此要求可以将查询更改为其他查询

额外的问题是有可能加载 A.BList [@ Number< 120] .C.BList.A [@ Number> 100]超级语法:)

1 个答案:

答案 0 :(得分:4)

激活:正如你所说,db4o使用它activation-mechanism来控制加载的对象。为了防止加载许多对象,有不同的策略。

然而,所有这些东西在复杂的对象图上都相当痛苦。摆脱痛苦的唯一策略是transparent activation。创建一个像TransparentlyActivated这样的属性。使用此属性标记存储的类。然后使用db4otool来增强您的课程。将db4otool-command添加到Visual Studio中的Post-Build事件:与'PathTo\Db4oTool.exe -ta -debug -by-attribute:YourNamespace.TransparentlyActivated $(TargetPath)

类似

Guid,Gen​​eric Collections: 否(在版本7.12或8.0中)。但是,如果存储自己的结构:db4o

处理的结构很差

WebApplication:我建议使用嵌入式容器,然后推荐session-container for each request

扩展问题部分的更新

对你的情况。对于这种复杂的激活模式,我会使用透明激活。 我假设您在实际场景中使用属性而不是公共字段,否则透明持久性不起作用。

透明激活基本上在方法/属性被调用的时刻加载对象。因此,当您访问属性A.R然后A本身它已加载,但不是引用的对象。我只是通过一些访问模式来表明我的意思:

获取'A.BList.C.BList.A.R'

  • 访问A.BList时加载A. BList数组填充了非活动对象
  • 您继续导航到BList.C。此时加载BList对象
  • 然后您访问C.BList。 db4o加载C-object
  • 依此类推。

所以当你得到'A.BList.C.BList.A.R'然后'A.R'没有加载

卸载的对象由'empty'-shell对象表示,该对象的所有值都设置为null或默认值。数组总是完全加载,但首先填充未激活的对象。

请注意,没有真正的查询语法可以执行某种精心设计的加载请求。您加载起始对象,然后根据需要提取内容。

我还需要提一下,这种访问在db4o网络上表现糟糕。

还有另一种暗示。如果您想对图形结构进行精心设计的工作,还应该查看图形数据库,例如Neo4JSones Graph DB