Как быстро запросить данные в Oracle с помощью идентификатора данных, предоставленного Redis - PullRequest
0 голосов
/ 31 марта 2020

предпосылка

  1. В нашей системе есть два redis, одна система разрешений и одна база данных разрешений
  2. N бизнес-систем, N бизнес ORACLE базы данных
  3. Система разрешений владеет исключительно Redis. Пользователь входит в систему разрешений и переходит в бизнес-систему. В настоящее время бизнес-системе необходимо запросить разрешение системы, которой принадлежит разрешение. Разрешения хранятся в другом Redis. Когда вы сделаете запрос позже, вам нужно будет только go, чтобы получить данные заново.
  4. Когда мы запрашиваем SQL данных: ВЫБЕРИТЕ COLUMN1 ... ИЗ ТАБЛИЦЫ 1 ГДЕ A.ID IN (XXX, XXX);

задача

Сначала это было очень гладко. Позже я обнаружил, что когда идентификатор пользователя превышает 1000, Oracle сообщит об ошибке, которая приведет к сбою запроса.

Решения, которые у меня уже есть

  1. Используйте ИЛИ, SQL: ВЫБЕРИТЕ КОЛОННУ 1 ... ИЗ ТАБЛИЦЫ 1 ГДЕ A.ID ВХОД (XXX, XXX) ИЛИ A.ID IN (XXX, XXX);
  2. Использовать UNION ALL, SQL: ВЫБРАТЬ КОЛОННУ1 ... ИЗ ТАБЛИЦЫ1, ГДЕ A.ID IN (ВЫБРАТЬ XXX ИЗ ДВОЙНОГО СОЮЗА ВСЕ ...);
  3. Идентификатор разрешения пользователя не сохраняется в Redis, но в базе данных. Пользователь удаляет старые данные и вставляет новые данные после каждого входа в систему. Однако, на мой взгляд, решение 1 будет очень очевидным, когда оно действительно будет применено. Хотя 2 быстрее, чем 1, это не красиво и лаконично (на мой взгляд, хороший код должен быть красивым и лаконичным). 3 Нужно часто работать с базой данных, руководитель не позволяет.

Есть ли какое-либо иное лучшее решение этой проблемы?

1 Ответ

0 голосов
/ 31 марта 2020

Если это в вашем контроле, как сформулировать ввод, затем используйте несколько столбцов в предложении IN, и вы сможете использовать более 1000 значений в списке IN значений.

Ниже приведен лучший подход:

SELECT COLUMN1 ... FROM TABLE1 A 
WHERE (A.ID,1) IN (
                   (XXX1, 1),
                   (XXX2, 1),
                   (XXX3, 1),
                   ...
                   ...
                   (XXX9999, 1)
                   ) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...