首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关于使用db4o的几个问题

关于使用db4o的几个问题
EN

Stack Overflow用户
提问于 2009-10-25 16:26:53
回答 3查看 2.2K关注 0票数 18

我正在尝试db4o对象数据库,到目前为止,我非常喜欢我所看到的,但我也读到了stackoverflow db4o experiences?上的这篇文章,它表明并不是所有看起来那么容易的事情都是容易的。

现在,我有一些关于如何在现实世界的应用中使用db4o的问题。因此,如果你有任何使用db4o的经验(特别是在web应用环境中),我很乐意听听他们的意见。

以下是我的问题:

  1. 在使用db4o存储对象时,如何管理对象标识?**

来自关系型数据库管理系统的背景,通常每个表都有一个主键/标识列,我现在无法想象如何在db4o中管理对象标识。

例如,如果我正在使用NHibernate / mysql,并且需要根据id查找用户对象,我将执行session.Load(primaryKey),它将通过它的PK来检索。在表定义中,主键被定义为自动递增的情况也很常见。

  • 由于db4o中没有这样的选项,我的想法是使用Guid结构来标识对象数据库中的一些对象。

  • 是否有工具来查看数据库中存储的对象?

在db4o世界中有没有像SQL Server Management Studio (可能没那么复杂)这样的东西?我想查看db文件中已存储的数据/对象。

  • 您重命名您的域对象时出错了吗?

据我所知,当您重命名一个类时,数据库中以前存储的任何实例都无法再检索到。有没有办法解决这个问题?如何处理已包含多个对象的实时数据库的更新?

  • 是否可以将属性从保存到数据库中排除?

例如,如果一个域对象持有对(无状态)服务对象的引用,那么如果该域对象被持久化,那么该服务对象也将被持久化,对吧?

在数据库中保存一个服务实例似乎有点奇怪,至少对我来说是这样。

是否可以将服务实例排除在保存状态之外?如果再次检索域对象,如何确保服务也再次注入到实例中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-13 07:20:24

1)在使用db4o存储对象时,如何管理对象标识?在db4o中,你通常没有id。db4o使用object-identity来区分对象。因此,内存中的相同对象将成为数据库的相同对象。

只要你不序列化对象,它就能正常工作。然而,一旦对象被序列化/断开,这就不再起作用了。例如,在web场景中:您将数据发送到浏览器。现在,您需要稍后再次通过一些ids来标识对象。

我认为这三个选项是可能的:-使用db4o internal id。然而,这个id不是永远的。对数据库进行碎片整理会更改此id。-使用db4o's UUIDs。但是db4o UUID是相当大的-您自己创建ids

2)有一个对象管理器工具来查看数据库。然而,在目前的状态下,它是极其有限的。在我看来,这是db4o的一个巨大缺陷。

3)您可以创建aliases, rename classes and fields etc。但是,更改继承层次结构并不起作用。然后您需要将旧数据复制到新实例中。

4)是的。您可以使用.NET-非序列化属性或自定义属性将字段标记为transient

票数 13
EN

Stack Overflow用户

发布于 2012-01-24 01:10:48

在面向对象的数据库(如db4o)中,不应该真正使用对象标识。取而代之的是使用查询和导航。首先执行查询以获取一个/某些对象,然后使用导航获取其他对象。

“导航”意味着你只需跟随任何已加载对象中的字段/引用。

使用对象标识符可以被认为是糟糕的风格,大多数应用程序(据我所知)根本不使用它们。

票数 2
EN

Stack Overflow用户

发布于 2011-11-15 05:47:34

在使用DB4O进行一些工作的同时,我编写了一个简单的DB4O对象浏览器,它的工作性能比附带的浏览器要好得多。试一试,它是开源的。

http://sourceforge.net/projects/db4oviewer/develop

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1620355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档