Что такое «вычитаемый» метод для свойства Xodus?

#java #xodus

#java #xodus

Вопрос:

У меня есть этот пользовательский тип свойства:

 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 использует subIterable и compareTo ? Безопасно ли просто возвращать нулевое значение для @NotNull метода? EmbeddedEntityIterable По сути, это Map<String,Comparable> under the hood, который также является представлением очень вложенного объекта JSON.

Ответ №1:

Возврат небезопасен null , и вы должны реализовать нетривиальный compareTo . В противном случае вы не сможете использовать ваш ByteIterable в качестве ключа (с хранилищами любого типа) и значения (с хранилищами, которые могут иметь дубликаты ключей). Если вы используете EntityStores API и your ByteIterable в качестве значения свойства, то вам обязательно нужно реализовать методы, поскольку ByteIterable они будут использоваться под капотом в качестве ключа в индексе значения свойства.

Для пользовательских реализаций ByteIterable предпочтительнее наследовать от абстрактного класса ByteIterableBase, который имеет базовые реализации методов.

В addtiton, если вы определяете пользовательский тип свойства, вы должны определить order для поддержки готовых функций, таких как сортировка, поиск значения или поиск в диапазоне значений. Если вам не нужны эти функции, то, вероятно, имеет смысл сохранять такие данные в больших двоичных объектах или строках больших двоичных объектов вместо свойств.