powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск по ресурсам
39 сообщений из 39, показаны все 2 страниц
Поиск по ресурсам
    #39265440
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Имею тему

Функция Java внедренная в базу Oracle
В ней ресурс на 40 тыс срок (текст)
По нему необходимо организовать поиск

- поиск по kind,duration,grace,monthly
- возврат amount[],unpaid[],outstanding[]

- оптимизация
if(i==(duration+1)*3) break; - прерывание если набор данных уже заполнен, т.е. цикл не работает по всему ресурсу
- сверху расположены группы, которые по статистике втречаются чаще в вызывающем потоке

Делаю так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
	private void LoadProfil(String resource,String kind,int duration,int grace,Double monthly,Double amount[],Double unpaid[],Double outstanding[]) 
    throws IOException 
	{
		InputStream is = this.getClass().getResourceAsStream(resource);
		InputStreamReader ir = new InputStreamReader(is);
		BufferedReader br = new BufferedReader(ir);
		int i=0;
		String  line;
		while ((line = br.readLine()) != null) 
		{
			String[] parts = line.split(",");
			if (   parts[1].equals(kind)
				&& duration >= Double.parseDouble(parts[2])  	
				&& duration <= Double.parseDouble(parts[3])  	
				&& grace    >= Double.parseDouble(parts[4])  	
				&& grace    <= Double.parseDouble(parts[5])  	
				&& monthly  >= Double.parseDouble(parts[6])  	
				&& monthly  <= Double.parseDouble(parts[7])  
				&& duration >= Double.parseDouble(parts[8]) 
			   ) 
			{
				if(parts[0].equals("AMOUNT"     )){      amount[Integer.parseInt(parts[8])] = Double.parseDouble(parts[9]); i++;}
				if(parts[0].equals("UNPAID"     )){      unpaid[Integer.parseInt(parts[8])] = Double.parseDouble(parts[9]); i++;}
				if(parts[0].equals("OUTSTANDING")){ outstanding[Integer.parseInt(parts[8])] = Double.parseDouble(parts[9]); i++;}
				if(i==(duration+1)*3) break;  
			}
		}
		br.close();
		ir.close();
		is.close();
	}



Общая продолжительность поиска достаточно высока, так как запускается сама функция 15-20 тыс раз
Подскажите нет ли в java типов, механизмов которые осуществили ли мне быструю реализация

Заранее благодарен !
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265447
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Ресурс выглядит так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,0,0.00000000
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,1,0.00000000
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,2,0.00500124
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,3,0.00957669
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,4,0.01556268
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,5,0.01837840
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,6,0.02344896
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,7,0.03395024
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,8,0.04275083
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,9,0.05045687
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,10,0.05385495
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,11,0.06786924
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,12,0.08264786
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,13,0.11315307
AMOUNT,POS_Pos_Comfy,0.0000,84.0000,0.0000,0.0000,0.0000,0.5000,14,0.11896008
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265489
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X...так как запускается сама функция 15-20 тыс раз
Подскажите нет ли в java типов, механизмов которые осуществили ли мне быструю реализация
создать нормальный тип/класс.

Один раз загрузить (распарсить ресурс), потом работать по уже загруженным данным.

В чем проблема, не понятно.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265553
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

А почему бы этот "ресурс" не загрузить в базу, как таблицу?
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265725
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GarrickHOME_X,
А почему бы этот "ресурс" не загрузить в базу, как таблицу?


Причина - архитектурного характера, функция будет находиться в базе
но не будет иметь непосредственной связи с базой
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265739
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevHOME_X...так как запускается сама функция 15-20 тыс раз
Подскажите нет ли в java типов, механизмов которые осуществили ли мне быструю реализация
создать нормальный тип/класс.

Один раз загрузить (распарсить ресурс), потом работать по уже загруженным данным.

В чем проблема, не понятно.


Не понял Вас

У меня есть функция Java (вызывается SQL запросом) в ней ресурс (40 тыс. записей)
Функция вызвалась - произошло распар-е ресурса, функция отработала, память очистилась
Следующая запись SQL снова вызывает функцию - распар-е - возврат результата , очистка.

Итак 20-30 тыс. записей = 20-30 тыс. вызовов функции.

Или знаете другой пример, прошу привести

Заранее благодарен !
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265742
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XПричина - архитектурного характера, функция будет находиться в базе
но не будет иметь непосредственной связи с базой
Что мешает эту связь добавить? Вы понимаете, что вы хотите свою собственную БД на базе текстового файла внутри уже существующей БД?
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265764
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XСледующая запись SQL снова вызывает функцию - распар-е - возврат результата , очистка.

Итак 20-30 тыс. записей = 20-30 тыс. вызовов функции.

1) Традиционный способ.

Распарсить, вызвать N-раз функцию в пределах SQL, очистить память (или руками или при окончании сессии Oracle).

Oracle под рукой нет, да и приложение Ваше не знаю, но парсить 20-30 тыс. раз на каждое обращение в SELECT - это жесть.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265771
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Более чем понимаю.....
мне нужна единая JAR библиотека, которая будет вызываться интегрироваться
и вызываться не только из базы., а из под Windows

Соответственно эдакой набор констант приходиться держать во внутри исполь-го файла.
Увы....
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265776
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но не в виде же текста, в конце концов!

И падеж типов в коде, тоже доставляет. Параметр с типом int, а парсинг и сравнение идет с Double
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265778
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Тогда вам нужна любая легковесная БД типа SQLite, HSQL, H2, JavaDB/Derby. Можно её, конечно, написать самому, но зачем?
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265779
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и на худой конец, откройте хотя бы для себя паттерн Singleton

Желательно почитать, что значит слово cache. Но тут советовать не берусь, т.к. не знаю Ваши объемы данных, где все это будет исполняться и насколько много разных ресурсов.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265786
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТогда вам нужна любая легковесная БД типа SQLite, HSQL, H2, JavaDB/Derby. Можно её, конечно, написать самому, но зачем?
Нафига? Явно конструкции вида:

duration >= Double.parseDouble(parts[2])
duration <= Double.parseDouble(parts[3])
grace >= Double.parseDouble(parts[4])
grace <= Double.parseDouble(parts[5])
monthly >= Double.parseDouble(parts[6])
monthly <= Double.parseDouble(parts[7])
duration >= Double.parseDouble(parts[8])

по индексам фактически не соптимизируются. А использовать СУБД для тупого перебора... можно и самому в коде перебрать, еще и быстрее будет (если работать в памяти и руки иметь прямые)

IMHO
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265788
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Извините не понял Вас

По пунктам
1. java класс внедрен в базу Oracle
2. заведен тип базы который отвечает за связь с эти классом
3. делаем вызов SQL запроса, который ссылается на этот тип базы

Пример
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
create or replace type ttNbi as object
(
  contract         VARCHAR2(14),
  segment          VARCHAR2(2),
  .........................................
  nbi              NUMBER(18,8),

  constructor function ttNbi(
                             contract         VARCHAR2,
                             segment          VARCHAR2,
                             .....................................
                             sms_rate         NUMBER
                            ) return self as result,
     static function Execute(
                             contract         in out VARCHAR2,
                             segment          in out VARCHAR2,
                             .............................................
                             nbi              in out NUMBER
                            ) return varchar2
external name 'Analitic.Irr.Execute
                            (
                             java.lang.String[],
                             java.lang.String[],
                             ..........................
                             oracle.sql.NUMBER[]
                            ) return java.lang.String[]'
);
                     

create or replace type body ttNbi as

  constructor function ttNbi(contract         VARCHAR2,
                             segment          VARCHAR2,
                             program          VARCHAR2,
                             ....................................
                             sms_rate         NUMBER
                            ) return self as result
  as begin 
    declare 
      s varchar2(10);
    begin
      self.contract       :=contract;
      self.segment        :=segment;
      ........................................
      self.sms_rate       :=sms_rate;
      s:=ttNbi.Execute(self.contract,         
                       self.segment,          
                       ...........................
                       self.nbi
                      );
      return;
    end;
  end;
end;                     
                     
select A.NBI.CONTRACT,
       A.NBI.IRR,
       A.NBI.APR,
       A.NBI.AMO,
       A.NBI.NBI  
  from (
        select A.*,
               ttNbi(A.contract, 
                     A.segment,
                     ....................
                     A.sms_rate
                    ) NBI 
          from (
                select id_contract_sap   contract,
                       To_char(rsegment) segment,
                       ..................
                       sms_rate 
                  from LIST
               ) A  
       ) A 



Прошу Вас описать Ваше предложение на маленьком примере
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265792
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

По поводу текущего кода.
- Загрузите данные в память, а не читайте из ресурсов.
- Используйте любой простейший индекс для kind. Хотя бы HashMap.
В принцпе, если записей в каждом kind не много, то итерация по одной группе будет достаточно быстрой.
Но можно и внутри каждого kind сгруппировать следующий параметр и оптимизировать его поиск аналогичным способом.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265794
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczHOME_X,

Тогда вам нужна любая легковесная БД типа SQLite, HSQL, H2, JavaDB/Derby. Можно её, конечно, написать самому, но зачем?


Как это ставить на N- пользовательских ПК ?
Разрешение СБ и т.д.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265799
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XПрошу Вас описать Ваше предложение на маленьком примере
1. Загрузку и разбор по строкам и по полям нужно делать один раз для всех данных. Результат хранить в статическом поле. Надо вообще почитать как именно там Oracle экземплярами JVM управляет. Могут быть нюансы.

Это уже вам даст огромный прирост скорости. Если этого не достаточно, оптимизируйте перебор.
2. То что вы загрузили, поместите в структуру HashMap<String, MyDomainModelTextFileRecordName>. Заполняйте её при чтении в п.1, так чтобы ключом сделать, например, группу.

Померяйте производительность ещё раз. Если снова недостаточная, можно сделать
3. второй индекс HashMap<String, HashMap<String, MyDomainModelTextFileRecordName>>, где первый ключ это kind, а второй - че у вас там в первой колонке.

Сколько у вас таких файлов?
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265800
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XBlazkowiczHOME_X,

Тогда вам нужна любая легковесная БД типа SQLite, HSQL, H2, JavaDB/Derby. Можно её, конечно, написать самому, но зачем?


Как это ставить на N- пользовательских ПК ?
Разрешение СБ и т.д.
Embedded. Точно так же как вы подключаете jar вашего проекта.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265802
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev можно и самому в коде перебрать, еще и быстрее будет (если работать в памяти и руки иметь прямые)


как хранить поток, изначально описать как типовой массив ? на 40 тыс. записей

Если это "...Хотя бы HashMap...." откуда его грузить ?
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265803
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XЕсли это "...Хотя бы HashMap...." откуда его грузить ?
? Из вашего файла.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265810
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X1. java класс внедрен в базу Oracle
2. заведен тип базы который отвечает за связь с эти классом
3. делаем вызов SQL запроса, который ссылается на этот тип базы

Сколько много умных слов, что бы в результате породить вызов одной функции.

Blazkowicz- Загрузите данные в память, а не читайте из ресурсов.

Вот и я об этом!

1)
При этом, создавать классы Home_X вроде умеет (я такого в Oracle не умею)

Ну загрузи ты в конструкторе ресурс, а в ф-ции обработки (разумеется НЕ static) им и пользуйся

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

2)
Даже не умея создавать классы/экземпляры, никто не мешает сделать Singleton и там закешировать загруженный ресурс. Жить правда будет наверное до конца Oracle сесии, т.ч. это опасная идея (смотря как реализовать) - но в качестве костыля, вполне.

IMHO

p.s. Примера не будет, Oracle под руками нет, да и желания нет. Я лучше пива выпью.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265814
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Если у вас файлов много, то добавьте внутри них свой индекс, чтобы не читать каждую строку, а по индексу быстро найти нужный блок файла.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265816
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczHOME_XПрошу Вас описать Ваше предложение на маленьком примере
1. Загрузку и разбор по строкам и по полям нужно делать один раз для всех данных. Результат хранить в статическом поле. Надо вообще почитать как именно там Oracle экземплярами JVM управляет. Могут быть нюансы.

Это уже вам даст огромный прирост скорости. Если этого не достаточно, оптимизируйте перебор.
2. То что вы загрузили, поместите в структуру HashMap<String, MyDomainModelTextFileRecordName>. Заполняйте её при чтении в п.1, так чтобы ключом сделать, например, группу.

Померяйте производительность ещё раз. Если снова недостаточная, можно сделать
3. второй индекс HashMap<String, HashMap<String, MyDomainModelTextFileRecordName>>, где первый ключ это kind, а второй - че у вас там в первой колонке.

Сколько у вас таких файлов?

1. файл один,
2. загрузке в объект HashMap (здесь понятно)
3. чем и из чего распиливать = this.getClass().getResourceAsStream(resource);

4. "Oracle экземплярами JVM управляет" - т.е. Вы хотите сказать что для сессии возможно единоразово
вызвать класс ресурсов, распилить его в память и прогнать по нему пул записей из 20 тыс. записей.

Верно ли Вас понимаю - так разве возможно ?
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265819
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XБолее чем понимаю.....
мне нужна единая JAR библиотека, которая будет вызываться интегрироваться
и вызываться не только из базы., а из под Windows

Я бы всё равно делал на JDBC, и выбирал бы базу из контекста. Если Oracle - читаем из Oracle, если нет, читаем через любую легковесную встроенную БД
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265821
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень странно работать внутри БД и при этом не использовать курсоры и реляционную алгебру.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265825
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X3. чем и из чего распиливать = this.getClass().getResourceAsStream(resource);

Распиливать? У вас же есть код чтения всех полей из файла. Разница только в том что вы поля сразу выкидываете. А можно записывать в память.


HOME_X4. "Oracle экземплярами JVM управляет" - т.е. Вы хотите сказать что для сессии возможно единоразово
вызвать класс ресурсов, распилить его в память и прогнать по нему пул записей из 20 тыс. записей.

Конечно. Но в пределах сессии. Чтобы зашарить данные между всеми сессиями, надо почитать как оно делается
https://docs.oracle.com/cd/B19306_01/java.102/b14187/chtwo.htm
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265826
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОчень странно работать внутри БД и при этом не использовать курсоры и реляционную алгебру.
Становись в очередь.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265827
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X4. "Oracle экземплярами JVM управляет" - т.е. Вы хотите сказать что для сессии возможно единоразово вызвать класс ресурсов, распилить его в память

В чем проблема?

Любой PL/SQL пакет, секция инициализации.

Другое дело, что тут зависит кто клиент. Если где-то есть пул коннектов к базе, то понятие "сессия" уже не то, что прежде.

HOME_Xединоразово распилить его в память и прогнать по нему пул записей из 20 тыс. записей.

Верно ли Вас понимаю - так разве возможно?
А почему нет? В чем проблема?

Это до Вас и пытаемся донести.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265829
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Я бы всё равно делал на JDBC, и выбирал бы базу из контекста. Если Oracle - читаем из Oracle, если нет, читаем через любую легковесную встроенную БД



Не, извините, сложно для тиражирования, доп. инсталяция ...


4. "Oracle экземплярами JVM управляет" - т.е. Вы хотите сказать что для сессии возможно единоразово
вызвать класс ресурсов, распилить его в память и прогнать по нему пул записей из 20 тыс. записей


Подтвердите верно ли я Вас понял.

Не понимаю как это реализовать и синтегрировать с Oracle-ом ?
Пример (В КОДЕ) не подкините ?
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265831
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во времена девятки у Oracle была очень жлобская JVM. Непроизводительная
и по дефолту сконфигурированная на такой объем Xmx чтобы только написать
Hello World. Даже для установки патчей на Oracle ей временно поднимали эту планку.

Не знаю как щас. Наверное получше стало но при прочих равных условиях я-бы лишний раз
подумал перед тем как завязывать какие-то перформансные штуки на нее.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265840
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВерно ли Вас понимаю - так разве возможно?
А почему нет? В чем проблема?

Это до Вас и пытаемся донести.[/quot]


Уже подтвердили - спасибо !!!!



Вот бы еще примерчик в коде (или ссылку толковую статью )
В Oracle Help-е - там образно пишется, детализация хреноВАТА !!!!
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39265844
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XПример (В КОДЕ) не подкините ?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class MyResourceLoader {

   static final Map<String, List<Records>> data = loadDataFromResource()
   
   private void LoadProfil(String resource,String kind,int duration,int grace,Double monthly,Double amount[],Double unpaid[],Double  outstanding[]){
           for (Record record : data.get(kind)){
              if(record.matches(duration, grace, monthly)){
                    record.collect(amount, unpaid, outstanding, i++);
              }
           }
   }
}



Важно:
1) Ресурс только один. Почему-то же он у вас параметром метода?
1) На каждую сессию будет загружаться ресурс в память сессии.
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39266598
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

1. Партфицировал ресурс по условиям "="
Из одного файла сделал 30, скорость увеличилась раз в 10 ........

Относительно кода
Вас понял - спасибо Вам большое за пример !
Буду внедрять.......


Еще момент - следуя Вашему первоначальному совету (если все верно понял ....)

Пытаюсь внедрить в jar библиотеку внут. таблицу.
1. в целом архитектура не нарушается - изнутри функция не имеет доступа к данным oracle.
2. будет организован доступ к некой внутренней таблице тот же функции.

Отсюда вопрос
- это надо внедрять в базу Oracle драйвера для работы с неким форматов (например DBF)
- не могли бы посоветовать "быстрый" формат
- может в 12 версии Oracle есть уже внедренные JDBC драйвера для "локальных" форматов.

Будет ли выиграш в скорости при использовании такого driver-а ?
Или распар-е текста все же лучше ?
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39266638
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz1) Ресурс только один. Почему-то же он у вас параметром метода?


Планировал использовать разные ресурсы, как в примере с партификацией
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39266640
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz1) На каждую сессию будет загружаться ресурс в память сессии.


Мне это более чем подходит
А как и как будет контролироваться этот процесс ? (java контролирует ?)

Имею в виду следующее
Запрос
select A.F1,MyType(ссылка на java класс) F2
from LIST

Результат
F1 F2
'А' 100
'B' 200
'С' 300

Первая запись - инициализация массива (считывание из текста)
Вторая запись - будет повторять считывания, или java умная и поймет, что ресурс уже обработан ?
Третья запись - будет повторять считывания, или java умная и поймет, что ресурс уже обработан ?

End выборки - массив в памяти ?
Когда будет очистка потока ?
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39266645
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Blazkowicz]HOME_XПример (В КОДЕ) не подкините ?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class MyResourceLoader {

   static final Map<String, List<Records>> data = loadDataFromResource()
   
   private void LoadProfil(String resource,String kind,int duration,int grace,Double monthly,Double amount[],Double unpaid[],Double  outstanding[]){
           for (Record record : data.get(kind)){
              if(record.matches(duration, grace, monthly)){
                    record.collect(amount, unpaid, outstanding, i++);
              }
           }
   }
}



data.get(kind) - здесь не ясно, считывание по УНИКАЛЬНОМУ ключу ?
у меня как такого нет ключа

Есть группа (по которой провел партификацию)
Есть поля в диапазоне F1-F2, T1-T2,D1-D2

Тип Групп F1 F2 T1 T2 D1 D2 RETURN
АМОUNT POS_CASH > < > < > < 1
АМОUNT POS_CASH > < > < > < 2
АМОUNT POS_CASH > < > < > < 6
UNPAID POS_CASH > < > < > < 4
UNPAID POS_CASH > < > < > < 3
UNPAID POS_CASH > < > < > < 5

Чем я выиграю используя MAP c уникальным ключом, или в MAP-е можно локализовать
поиск по ГРУППЕ записей ?
Что вернет data.get(kind) - группу записей, по которой нужно пройтись циклом
Прошу подтвердить этот момент

СПАСИБО ЗА УЧАСТИЕ
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39266648
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя столько вопросов, что ответить на них не возможно. Больше половины можно прочитать в любой книжке по Java (static, map etc...)
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39266652
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Код: java
1.
2.
3.
4.
5.
6.
7.
Тип       Групп     F1  F2    T1 T2    D1 D2   RETURN
АМОUNT  POS_CASH     >  <     >  <     >   <      1
АМОUNT  POS_CASH     >  <     >  <     >   <      2
АМОUNT  POS_CASH     >  <     >  <     >   <      6
UNPAID  POS_CASH     >  <     >  <     >   <      4
UNPAID  POS_CASH     >  <     >  <     >   <      3
UNPAID  POS_CASH     >  <     >  <     >   <      5



Т.е. такая матрица отбора
...
Рейтинг: 0 / 0
Поиск по ресурсам
    #39267023
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Blazkowicz - спасибо за конкретику, получилось неплохо

Пару моментов уточните пожалуйста
1. Что более эффективно вложить внутр. таблицу или отпарсить текст. ресурс

2. Суть расчета JAVA функции следующий
передал 15 обязательных параметров
вернул 20-25 параметров , в том числе 1 итоговых, остальные по требованию пользователя
ИТОГОВЫЙ параметр, это результат расчета остальных по требованию .

Заметил - если возвращаю только ИТОГОВЫЙ - работает 20-25 сек
если + остальные по требованию, время на работу увеличивается.

Можно ли предположить, что при возврате идет потеря времени на преобразование типов Oracle
Java. oracle.sql.NUMBER -> Double и обратно Double -> oracle.sql.NUMBER

Может имеет смысл заметить на более трив. тип, скажем NUMERIC(18,2) -> VARCHAR2 -> Java.Lang.String

Прошу Вашего совета...
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Поиск по ресурсам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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