Java EclipseLink: можно ли добавлять дополнительные условия к запросам SQL с помощью встроенных инструментов EclipseLinkJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java EclipseLink: можно ли добавлять дополнительные условия к запросам SQL с помощью встроенных инструментов EclipseLink

Сообщение Anonymous »

Контекст:
В проекте используется база данных PostgreSQL, управляемая через EclipseLink.
Горизонтальное масштабирование планируется путем перехода на сегментированный Postgres Pro Shardman.
В настоящее время первичным ключом каждой таблицы является поле уникального идентификатора. При переходе к распределенной системе возникает необходимость добавления дополнительного поля seg, обозначающего уникальный номер конкретного узла базы данных.
Например, есть 3 сервера:
  • Все записи в таблицах на первом сервере будут содержать только значение 0 в поле seg.
  • На втором сервере значение 1
  • На третьем значение 2 и так далее.
Это делается для того, чтобы запрос на чтение, например:

Код: Выделить всё

SELECT * FROM table WHERE id = 1000;
Можно было бы сразу указать сегмент, где хранится запись:

Код: Выделить всё

SELECT * FROM table WHERE seg = 0 AND id = 1000;
В этом случае серверу координатора запросов не придется обходить все узлы, чтобы найти значение, но он сразу поймет, что поиск следует выполнять на первом узле, где значение сегмента равно 0. Это исключает ненужную сетевую связь и сокращает время выполнения запроса.

Проблема:
Поскольку текущая база данных представляет собой простой PostgreSQL, все запросы в проекте, включающие предложения WHERE и JOIN, используют только поле id.
Добавление дополнительных предложений вручную с помощью поля seg очень сложно трудоемкая задача и подвержена множеству неожиданных ошибок.
Вместо этого решением было сохранить значение поля seg непосредственно в первых 8 битах поля id.
Предположим, начальные значения полей:

Код: Выделить всё

seg = 3
id = 1000
Поле id преобразуется следующим образом:

Код: Выделить всё

id = id 

Подробнее здесь: [url]https://stackoverflow.com/questions/79877127/java-eclipselink-is-it-possible-to-add-additional-conditions-to-sql-queries-usi[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»