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

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

мой вариант использования: мне нужно синхронизировать данные о магазине, товаре и наличии в моей базе данных, а затем запросить их в зависимости от фильтров, orderBys, местоположения пользователя и переданного поискового текста.Мне нужно хранить, какой продукт доступен в каком магазине и обновлять эти данные каждые несколько минут.мне нужно создать подходящий полнотекстовый поиск, позволяющий мне также сортировать товары по релевантности (возможно, hibernate-search?)

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

идеи / возможности:

  1. многовзаимосвязь между магазином и продуктом и проблема с отдельной таблицей доступности: приводит к огромной базе данных «многие ко многим», которую невозможно объединить за разумное время (> 10 секунд)
  2. «многие ко многим»Связь между магазином и продуктом с доступностью, хранящейся в таблице nxm
    • Проблема: приводит к огромной базе данных «многие ко многим», которую невозможно объединить за разумное время (> 10 секунд)
    • проблема: хранение занимает много времени + обновление доступности - огромная проблема
  3. shop-string с ";;"в продукте
    • проблема: невозможно отсортировать по местоположению магазина методами postGIS - проблема: потенциально очень медленная
    • проблема: нет доступности, сопоставленной без объединения
  4. магазины json в продукте ([{"id":, цена: 1, количество: 12, местоположение: POINT (x, y)}, {…}] - проблема: невозможно отсортировать по местоположению магазина
  5. хранить идентификаторы товаров в json в магазине - проблема: нужно извлекать товары в зависимости от запроса, а не в зависимости от магазина

стек:

  • java 8
  • весенняя загрузка
  • jpa, hibernate
  • postgreSQL / postGIS

Может кто-нибудь дать мне подсказку или поделиться опытом о том, какрешить это?

...