Реализации для одного часто обновляемого столбца в сильно проиндексированной таблице с использованием Spring-Data - PullRequest
0 голосов
/ 21 июня 2019

У меня есть объект данных, который, как я ожидаю, будет иметь один очень часто обновляемый столбец и ряд в основном статических столбцов, по которым будет производиться поиск.

 asset(
    id PRIMARY_KEY,
    group_id REFERENCES group(id)
    last_contact bigint,
    name varchar,
    type varchar,
    version varchar,
    ....

)

Ожидается, что столбец last_contact будет обновляться очень часто, тогда как другие столбцы будут обновляться несколько раз

Ожидаемые запросы:

  • найти актив по id

  • поиск актива по групповому заказу по последнему контакту

  • поиск активов по названию в порядке last_contact ... и т.д.

Мне трудно определиться с реализацией для этих целей.

Опции, которые я вижу:

  1. Сохранить last_contact в той же строке

    • Проще всего реализовать, но беспокоит частая запись в строку
  2. Сохранение last_contact в базе отношений oneToOne с идентификатором актива

    • Сложно реализовать весной данные и спящий режим.
    • Не уверен, что это хорошая реализация для этой проблемы (например, будет ли возможно / эффективно отсортировать по last_contact в этой модели)

1 Ответ

1 голос
/ 21 июня 2019

Если вы ищете лучшее решение для производительности, оно определенно хранится в той же таблице, что и новый столбец. Еще одна вещь, которую стоит учитывать, если вы обновляете один столбец, создайте свой @Modifying @Query в своем хранилище, которое просто обновляет это поле. Это значительно улучшит производительность по сравнению с entity.save(), поскольку вы обновляете один столбец, а не весь объект.

...