2011-04-05 160 views
0

我们的数据库包含4,000,000条记录(sql server),它的物理大小为550 MB。 数据库中的实体以图形样式相互关联。当我加载一个实体从数据库5级深度有一个问题(所有记录被加载)。Db4O激活深度,Faq,Web应用程序的最佳实践

  • 有没有像实体框架的任何机构(包括( “MyProperty.ItsProperty”))

什么是使用db4o数据库使用最好的类型?

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

  • WebApplication与db4o有什么最佳实践吗?会话容器+ EmbeddedDb4ODb或Client/ServerDb4O?

THX的帮助..

THX的很好的解释。但我想给我确切的问题,作为一个样本: 我有三个实体:(NN关系,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.CEG“),其中(....)

 
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 [@编号> 100]超语法:)

+0

新增了对答案的更新。 – Gamlor 2011-04-07 16:10:44

回答

4

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

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

Guid,通用集合: 否(版本7.12或8.0)。但是,如果你存储自己的结构:那些db4o处理得很差

WebApplication:我推荐一个嵌入式容器,然后是session-container for each request

更新扩展问题部分

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

透明激活基本上是在一个方法/属性被称为第一个时刻加载一个对象。所以当你访问属性A.R时,它自己装载它,但不是被引用的对象。我只是经过几个你的访问模式来说明我的意思:

获得当您访问A.BList“A.BList.C.BList.A.R”

  • A被加载。 BList数组填充了未激活对象
  • 您继续导航至BList.C。此时,BList对象被加载
  • 然后您访问C.BList。 db4o加载C对象
  • 依此类推等等。

因此,当你“A.BList.C.BList.AR”,然后“AR”没有加载

一个卸载的目的是通过“empty'壳对象表示,其所有值设置为空或默认值。数组总是被完全加载,但是首先填充了未激活的对象。

请注意,没有真正的查询语法来做某种精细的加载请求。你加载你的开始对象,然后在你需要的时候拉入东西。

我还需要提到的是,这种访问将在db4o网络上表现糟糕。

又一个提示。如果你想在图形结构上做精细的工作,你还应该看看图形数据库,比如Neo4JSones Graph DB

+0

更详细的描述是什么?透明激活?或其他的东西? – Gamlor 2011-04-06 22:38:40

+0

我更新了问题.. – 2011-04-06 23:04:45

+0

我已添加关于激活问题的详细说明(附带样本)。其他解释很好,thx。另外你对激活的解释是很好的。但我认为我的情况比。谢谢 – 2011-04-06 23:07:31

相关问题