powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с преобразованием справочников из Java
25 сообщений из 49, страница 1 из 2
Работа с преобразованием справочников из Java
    #39904980
Морфий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите шаги по улучшению работы конвертации справочных значений.

Требования: высокая нагрузка, минимальное время конвертации.

Что имеется сейчас и как реализовано:
БД Oracle с таблицей:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
create table dict_map (
  dict_name varchar2(100), -- Наименование справочника
  sys_from varchar2(40),   -- Название системы источника
  code_from varchar2(40), -- Значение справочника в системе источника
  sys_to varchar2(40),    -- Система назначения
  code_to varchar2(40)   -- Значение справочника в системе назначения
);



Код: plsql
1.
2.
3.
4.
5.
6.
7.
-- Преобразование значения из системы SF1 в значение в системе SF2
INSERT INTO DICT_MAP (dict_name, sys_from, code_from, sys_to, code_to) VALUES ('DICT_1', 'SF1', 'Code_SF_1', 'ST2', 'Code_ST_2');
-- Обратное преобразование значения из системы SF2 в значение в системе SF1
INSERT INTO DICT_MAP (dict_name, sys_from, code_from, sys_to, code_to) VALUES ('DICT_1', 'ST2', 'Code_ST_2', 'SF1', 'Code_SF_1');

INSERT INTO DICT_MAP (dict_name, sys_from, code_from, sys_to, code_to) VALUES ('DICT_2', 'SF3', 'Code_SF_3', 'ST4', 'Code_ST_4');
INSERT INTO DICT_MAP (dict_name, sys_from, code_from, sys_to, code_to) VALUES ('DICT_2', 'ST4', 'Code_ST_4', 'SF3', 'Code_SF_3');


Таких строк будем считать более 10к, и возможно добавление и изменение значений.

При преобразованиях указывается нужные параметры для получения нового значения:
Код: plsql
1.
SELECT code_to FROM dict_map WHERE sys_from = ? AND sys_to = ? AND code_from = ? AND dict_name = ?


Запросы выполняются из Java сервиса, по чистому JDBC без ORM прослоек.


Интересует:
Как можно ускорить преобразование справочных значений? - Наверняка надо кэшировать в памяти, размер кэша предполагаю "не большой".
Если кэш - то как синхронизировать значения кэша с тем хранилищем, где хранятся значения справочника?
По времени сбрасывать весь кэш или как-то отслеживать время изменения перед преобразованием (но это потенциальная задержка каждого преобразования)
Будут ли плюсы от использования NoSQL БД?
Может быть есть какие-то готовые opensource продукты для работы со справочниками?


Какие есть варианты или предположения:
1. Настроить на Oracle хранение таблицы в памяти или какое-то другое кэширование запросов.
минус - запросы по сети и потеря время на этом.
2. Перейти на Postgres (Oracle излишний для этой задачи) и тоже настроить кэширование данных БД.
минус - запросы по сети и потеря время на этом.
плюс - не нужна лицензия за БД.
3. Использовать какие-то БД типа "ключ-значение" - тут пока пробел.
Ключом тогда будет составное значение sys_from + sys_to + code_from + dict_name
Будет ли это быстрее чем использование реляционных БД?

Готов ответить на ваши вопросы.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39904984
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не очень понятно что именно тормозит. Нужны данные профилирования Java приложения.
Это как сделать томограмму больному. Понимаешь да? Иначе мы судим не ботлнек а просто
твои мысли на эту тему.

Вобще. Если это оракл то у тебя должны быть проиндексированы следующие поля

Код: plsql
1.
create index dict_map_idx on dict_map(sys_from, sys_to, code_from, dict_name);


+опции сжатия индекса надо попробовать потом оционально.

Еще есть второй вариант - перестроить табличку в индексно-организованную. Но ты попробуй сначала первый вариант.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39904985
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Морфий,
Если честно не совсем понял задачу...
Но понял одно...надо какие-то преобразования над данными.
И тут лучше всего подойдёт
Пакетные или хранимые процедуры Oracle(pl/sql или Postres (pl/pgsql)
Но
то если вы можуту изменять код приложения...
Вместо
Код: plsql
1.
2.
3.
insert (...) values()
/*Использовать типа*/
pk_dict.process(...params);
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39904991
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будут ли плюсы от использования NoSQL БД?
В общем случае нет. Пока не будет идентифицирован проблемный кусок кода.
Если например проблема - сетевая интеракция (медленно летают TCP) пакеты
от вашего сервера приложений из Череповца в Чикаго - то хоть какую БД
ставь - все равно будет плохо и нудно. Поэтому и нужно точно-точно понять
какая java-строка работает медленно.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39904995
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Морфий,

Это - code_to как потом используется? Если результат конвертации записывается в БД, тогда делайте все в пакетной процедуре в БД.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905001
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Морфий,
Никто не понял задачи. И я тоже.
Конвертировать справочник надо одноразово.
Зачем тут скорость?
При конвертации все работы встают. То есть ночью.
Зачем тут скорость?
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905010
Морфий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про томограмму понимаю :-)

Хочется иметь "кэш" этих данных в самом сервисе, чтобы избежать запросов по сети в БД.
Или может быть какую-то inmemory БД поднимать в сервисе и туда переливать данные из реляционной БД, т.к. inmemory поиска кажется будет быстрее.

Вопрос больше сводиться к тому как правильно построить кэш который будет наполняться значениям из БД.
Как следить за актуальность кэша, как выбрать ключ, если использовать БД типа "ключ-значение",

Подойдёт ли тут Redis?
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905012
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Морфий,
По тексту видно что прогер сам себе ищет работу.
Почему справочник надо кешировать, а журнал документов нет?
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905014
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бред какой-то. От начала и до конца.

Описываемая задача является стандартной для любой СУБД. Называется .... JOIN

Зачем сервис, Java, кэш, Redis или что нибудь другое - вообще не понятно
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905015
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Морфий
Вопрос больше сводиться к тому
спросил про одно, а надо другое.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905016
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
+1)))
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905018
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Морфий
Про томограмму понимаю :-)

Хочется иметь "кэш" этих данных в самом сервисе, чтобы избежать запросов по сети в БД.
Или может быть какую-то inmemory БД поднимать в сервисе и туда переливать данные из реляционной БД, т.к. inmemory поиска кажется будет быстрее.

Вопрос больше сводиться к тому как правильно построить кэш который будет наполняться значениям из БД.
Как следить за актуальность кэша, как выбрать ключ, если использовать БД типа "ключ-значение",

Подойдёт ли тут Redis?

Очень многие вещи в архитектурах создаются итеративно. Тоесть ты ищещь решение. Пробуешь.
Плохо? Изменяешь. Наперед никакой архитектор здесь и в прочих форумах тебе никогда не посоветует
решение чтоб на всегда. Редис тоже имеет недостатки вида ограниченность памяти и неизвестность
сколько TTL ставить на каждую запись. Понимаешь да? Это как транспортная задача. Задача со многими
неизвестными.

В качестве inmemory dbms я навскидку вспоминаю: Java: Hazelcast, Ignite, Oracle Koherence, Cassandra.
Native: Redis, Memcached.

Кстати подумай о том как твой кеш будет инвалидироваться.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905024
apb12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предлагаю автора в бан,кто за ,кто воздержался ?)
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905026
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apb12,
))
ТС,
Какой из трех вопросов потерял актуальность:
- как конвертить спавочник
- как кешировать справочник
- no sql бд лучше ли оракла для моего проекта
?
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905028
apb12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
apb12,
))
ТС,
Какой из трех вопросов потерял актуальность:
- как конвертить спавочник
- как кешировать справочник
- no sql бд лучше ли оракла для моего проекта
?

его вопрос потерял актуальность вот с этой фразой
"Запросы выполняются из Java сервиса, по чистому JDBC без ORM прослоек."
за это нужно бить палками на площадях,потому что потом их говнокод будут разбирать такие как и проклинать свою жизнь)))
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905032
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы тоже не используем ORM.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905033
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apb12,
Согласен. Но вдруг у него внешний заказчик с этим сервисом сидит.
Тогда там другие законы. Законы а ля soap.
Или твой сервис)))
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905034
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Мы тоже не используем ORM.

Зато у оракла кеш есть.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905043
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
Мы тоже не используем ORM.

Зато у оракла кеш есть.

TimesTen?
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905049
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, нет. Из коробки)
Database caches
какие в базах данных есть кэши:

Buffer cache — кэш данных — cache for data pages/data blocks;
Statement cache — кэш операторов и их планов — cache of queries plan;
Result cache — кэш результатов строк — rows from queries;
OS cache — кэш операционной системы.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905112
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У всех dbms это есть. Но топик не об этом.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905144
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Да. Ты выше замечательно сказал - итеративный подход. Его нет у автора.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905201
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apb12
предлагаю автора в бан,кто за ,кто воздержался ?)


Предлагаю тебя в бан.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905202
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
apb12
за это нужно бить палками на площадях,потому что потом их говнокод будут разбирать такие как и проклинать свою жизнь)))

Вот прям сейчас разбираю говнокод с орм там, где он не нужен. А вообще с твоей компетенцией и так уже всё ясно.
...
Рейтинг: 0 / 0
Работа с преобразованием справочников из Java
    #39905203
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Морфий,

10к записей - это ни о чём. Даже миллион таких записей ява прожуёт на обычном компе. Можешь всё выбрать и разложить по HashMap/TreeMap/поисковым деревьям или тупо по комплексному ключу. Бд тут вообще не при чём, не трогай её, ты дольше ходить будешь по сети. С инвалидацией кэша - не знаю, как у тебя данные обновляются, ничего не могу сказать. Если всё идёт через яву, прям там и синхронизируй всё, вообще никаких проблем.
Морфий
Готов ответить на ваши вопросы.

Какая нагрузка на сервис в запросах/сек?
...
Рейтинг: 0 / 0
25 сообщений из 49, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Работа с преобразованием справочников из Java
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]