【问题标题】:Db4O activation depth, Faq, Best Practise for Web ApplicationDb4O 激活深度、常见问题解答、Web 应用程序最佳实践
【发布时间】:2011-04-05 23:51:44
【问题描述】:

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

  • 有没有类似Entity Framework的机制(Include("MyProperty.ItsProperty"))

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

  • Guid 通用集合有什么问题吗?

  • 对于使用 db4o 的 WebApplication 是否有任何最佳实践? Session Containers+EmbeddedDb4ODb 还是 Client/ServerDb4O?

谢谢帮助..

谢谢你的解释。但我想将我的确切问题作为示例: 我有三个实体:(N-N 关系。B 是一个交集实体。Concept:Graph)


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").Include("BList.C.E.G").Where(....)

我想得到:A.BList.C.BList.A.R 但我不想得到:A.R 我想得到:A.BList.C.E.G 但我不想得到:A.BList.C.F 我想得到:A.BList.C.E.G 但我不想得到:A.BList.D

注意:此要求可以将一个查询更改为另一个查询

额外的问题是有没有可能加载 A.BList[@Number100] 超级语法:)

【问题讨论】:

    标签: c# configuration db4o


    【解决方案1】:

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

    然而,所有这些东西在复杂的对象图上是相当痛苦的。摆脱这种痛苦的唯一策略是transparent activation。创建一个属性,如透明激活。使用此属性来标记您存储的类。然后使用db4otool 来增强您的课程。将 db4otool-command 添加到 Visual Studio 中的 Post-Build 事件: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 本身,而不是引用的对象。我只是通过你们中的一些访问模式来说明我的意思:

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

    • 访问 A.BList 时会加载 A。 BList 数组中填充了未激活的对象
    • 您继续导航到 BList.C。此时 BList 对象已加载
    • 然后您访问 C.BList。 db4o 加载 C 对象
    • 等等等等。

    因此,当您获得“A.BList.C.BList.A.R”时,不会加载“A.R”

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

    请注意,没有真正的查询语法来执行某种复杂的加载请求。您加载起始对象,然后根据需要拉入内容。

    我还需要提及的是,这种访问在使用 db4o 的网络上会表现得很糟糕。

    又一个提示。如果您想对图形结构进行详细的工作,您还应该查看图形数据库,例如 Neo4JSones Graph DB

    【讨论】:

    • 更详细的描述是什么?透明激活?还是其他的?
    • 我添加了关于激活问题的详细描述(带示例)。其他解释很好,谢谢。您对激活的解释也很好。但我认为我的情况比这更糟。谢谢
    猜你喜欢
    • 2011-02-18
    • 2012-06-06
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多