Xodus 属性 的 "subIterable" 方法是什么?

What is the "subIterable" method for a Xodus property?

我有这个自定义 属性 类型:

public class EmbeddedEntityIterable implements Serializable, ByteIterable {
  
  @NotNull
  @Override
  public ByteIterable subIterable(int offset, int length) {
    return null;
  }

  @Override
  public int compareTo(@NotNull ByteIterable o) {
    return 0;
  }

}

Xodus 如何使用 subIterablecompareTo? return @NotNull 方法上的 NULL 值是否安全?这个 EmbeddedEntityIterable 基本上是一个 Map<String,Comparable> 的底层,它也是一个非常嵌套的 JSON 对象的表示。

return null 不安全,必须执行 non-trivial compareTo。否则,您将无法将 ByteIterable 用作键(对于任何类型的商店)和值(对于可以具有键重复项的商店)。如果您使用 EntityStores API 和您的 ByteIterable 作为 属性 值,那么您肯定必须实现这些方法,因为 ByteIterable 将在后台用作键在 属性 值索引中。

对于 ByteIterable 的自定义实现,最好继承自具有基本方法实现的 ByteIterableBase abstract class

此外,如果您定义自定义 属性 类型,则您必须定义顺序以支持 out-of-the-box 功能,例如排序、搜索值或在值范围内搜索。如果您不需要这些功能,那么将此类数据保存在 blob 或 blob 字符串中而不是属性中可能是有意义的。