Db4O数据库中的groovy域对象

Db4O数据库中的groovy域对象,groovy,db4o,griffon,Groovy,Db4o,Griffon,我正在groovy中使用db4o(实际上是griffon)。我正在将十几个对象保存到db4oobjectSet中,看到.yarv文件大小约为11Mb。我检查了它的内容,发现它将所有嵌套字段存储到每个对象中。这是浪费空间。 正在寻找避免存储元类从而减小result.yarv文件大小的方法,因为我将使用db4o存储数百万个实体。 我应该尝试调用构造函数(true)db4o配置吗?你觉得会有帮助吗? 任何帮助都将不胜感激 我不知道groovy,但根据您的描述,每个groovy对象都携带元数据,您希望跳

我正在groovy中使用
db4o
(实际上是griffon)。我正在将十几个对象保存到
db4o
objectSet中,看到.yarv文件大小约为11Mb。我检查了它的内容,发现它将所有嵌套字段存储到每个对象中。这是浪费空间。
正在寻找避免存储
元类
从而减小result.yarv文件大小的方法,因为我将使用
db4o
存储数百万个实体。 我应该尝试调用构造函数(true)
db4o
配置吗?你觉得会有帮助吗?
任何帮助都将不胜感激

我不知道groovy,但根据您的描述,每个groovy对象都携带元数据,您希望跳过存储这些对象

如果是这种情况,安装“null translator”(TNull类)将导致“”对象无法存储

PS:调用构造函数配置对数据库中存储的内容没有影响;它仅影响从db读取时对象的实例化方式。


希望这能有所帮助

我不知道groovy,但根据您的描述,每个groovy对象都携带元数据,您希望跳过存储这些对象

如果是这种情况,安装“null translator”(TNull类)将导致“”对象无法存储

PS:调用构造函数配置对数据库中存储的内容没有影响;它仅影响从db读取时对象的实例化方式。


希望这对您有所帮助

您也可以只存储实例。这些类被编译成常规的JavaISH类,没有附加特定于Groovy的特殊代码

就这样,

class Customer {
    // properties
    Integer id
    String name
    Address address

}

class Address{
    String street;
}

    def customer = new Customer(id:1, name:"Gromit", address:new Address(street:"Fun"))

作为替代方案,您可以只存储实例。这些类被编译成常规的JavaISH类,没有附加特定于Groovy的特殊代码

就这样,

class Customer {
    // properties
    Integer id
    String name
    Address address

}

class Address{
    String street;
}

    def customer = new Customer(id:1, name:"Gromit", address:new Address(street:"Fun"))

是的,我的意思是,我应该使用callconstructor来允许安全地实例化没有元数据的对象。实例化是另一个大问题,我想如果我有幸存储groovy对象w/o元数据的话。如果为元数据类配置空转换器,它也不会被重新加载(因为一开始没有存储任何内容)。至于设置callConstructors(false),这取决于groovy是否希望这个元数据对象被实例化(如果这些对象没有关联的“元数据”对象,我希望groovy会抱怨,但正如我所说的,我没有groovy的经验)我不是db40专家,不过我可以告诉你一些关于groovy和Griffon的事情(作为项目负责人,这并不奇怪;-)。基本上,元类是在运行时使用的,不需要将其持久化。从数据存储中检索对象时,将提供一个全新的元类实例,因此可以安全地保存对它的空引用。如果您找到避免在数据存储中存储元类字段的方法,请告诉我,以便我可以将该步骤添加到griffon-db4o插件,这样您就不必自己动手:-)是的,我的意思是我应该使用CallConstructor来允许安全实例化没有元数据的对象。实例化是另一个大问题,我想如果我有幸存储groovy对象w/o元数据的话。如果为元数据类配置空转换器,它也不会被重新加载(因为一开始没有存储任何内容)。至于设置callConstructors(false),这取决于groovy是否希望这个元数据对象被实例化(如果这些对象没有关联的“元数据”对象,我希望groovy会抱怨,但正如我所说的,我没有groovy的经验)我不是db40专家,不过我可以告诉你一些关于groovy和Griffon的事情(作为项目负责人,这并不奇怪;-)。基本上,元类是在运行时使用的,不需要将其持久化。从数据存储中检索对象时,将提供一个全新的元类实例,因此可以安全地保存对它的空引用。如果您找到避免在数据存储中存储元类字段的方法,请告诉我,以便我可以将该步骤添加到griffon-db4o插件,这样您就不必自己动手了:-)