Java: оптимальная обработка отношения «многие ко многим» с огромными наборами данных - PullRequest
0 голосов
/ 17 октября 2018

вот моя проблема.У меня есть огромное количество данных в таблицах «многие ко многим», которые мне приходится обновлять довольно часто, а также запрашивать их с помощью динамических фильтров, порядка и запросов по местоположению (postgis-db) ...

shop entity:

public class Shop extends BaseEntity {

  ....

  @ManyToOne
  @JsonIdentityReference(alwaysAsId = true)
  @JsonSerialize(using = IdSerializer.class)
  @JoinColumn(name = "parent_id")
  private Shop parent;

  @ManyToMany(mappedBy = "shops")
  @JsonIdentityReference(alwaysAsId = true)
  @JsonIgnore
  private List<Product> products = new ArrayList<>();

  ...
}

сущность продукта:

public class Product extends BaseEntity {
  ...
  @ManyToMany
  @JsonIdentityReference(alwaysAsId = true)
  @JoinTable(name = "product_shop",
        joinColumns = @JoinColumn(name = "product_id"),
        inverseJoinColumns = @JoinColumn(name = "shop_id"))
  private List<Shop> shops = new ArrayList<>();

таблица товаров состоит из примерно 1 миллиона строк, а магазинов - около 8000. следовательно, таблица «многие ко многим» равна 8 *В худшем случае 10 ^ 9 строк, что приводит к очень длинному времени запроса.

любая идея, чтобы решить эту проблему оперативно, имея в виду, что я хочу отсортировать магазины в соответствии с полем местоположения, которое.

текущий технический стек:

  • java 8
  • пружинный ботинок
  • hibernate / jpa
  • postgresql / postgis
...