在 ObjectBox 中,使用 ToMany 还是使用我自己的字符串 ID 列表来管理关系?

问题描述

以文档中的示例为例,使用 ToMany 关系:

@Entity
public class Customer {
    @Id public long id;
    
    // 'to' is optional if only one relation matches.
    @Backlink(to = "customer")
    public ToMany<Order> orders;
    
}

@Entity
public class Order {
    @Id public long id;
    
    String stringId;
    ...
}

其中 stringId 的顺序是一个长字符串,如“CS-DE-AA-order1234567890”。

出于同样的目的,如果我保留一个字符串 id 列表并自己管理它们,它会像:

@Entity
public class Customer {
    @Id public long id;
    
    String orderIds;
}

其中 orderIds 保持订单的 stringId 以空格分隔,例如: "CS-DE-AA-order1234567891 CD-DF-AB-order1234567891 CT-SE-BB-order1234567892 ..."

所以我想知道这两种方案在性能、效率和磁盘存储方面的比较。

解决方法

本地关系有几个优点:

  • 对于 1:N 关系,ID 嵌入在 N 侧的对象中(指向单个对象),占用 8 个字节
  • 关系使用对象 ID,它的查找速度比任何查询都要快
  • 关系属性会自动编入索引以实现高效访问
  • 在查询关系中,您可以在类型之间建立链接(又名“加入”)
  • 可扩展;即使您有数百万个关系,删除/更改/添加一个关系也会非常有效

您仍然可以忽略这些优势,并对您所做的事情感到满意,因为这对于您的用例来说可能已经足够了。你知道,你没有包括细节,这一切都取决于...