|
|
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
Доброго дня господа ! Имею тему Функция 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. Общая продолжительность поиска достаточно высока, так как запускается сама функция 15-20 тыс раз Подскажите нет ли в java типов, механизмов которые осуществили ли мне быструю реализация Заранее благодарен ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 13:09 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_X, Ресурс выглядит так Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 13:17 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_X...так как запускается сама функция 15-20 тыс раз Подскажите нет ли в java типов, механизмов которые осуществили ли мне быструю реализация создать нормальный тип/класс. Один раз загрузить (распарсить ресурс), потом работать по уже загруженным данным. В чем проблема, не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 13:55 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_X, А почему бы этот "ресурс" не загрузить в базу, как таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 14:42 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
GarrickHOME_X, А почему бы этот "ресурс" не загрузить в базу, как таблицу? Причина - архитектурного характера, функция будет находиться в базе но не будет иметь непосредственной связи с базой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:44 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevHOME_X...так как запускается сама функция 15-20 тыс раз Подскажите нет ли в java типов, механизмов которые осуществили ли мне быструю реализация создать нормальный тип/класс. Один раз загрузить (распарсить ресурс), потом работать по уже загруженным данным. В чем проблема, не понятно. Не понял Вас У меня есть функция Java (вызывается SQL запросом) в ней ресурс (40 тыс. записей) Функция вызвалась - произошло распар-е ресурса, функция отработала, память очистилась Следующая запись SQL снова вызывает функцию - распар-е - возврат результата , очистка. Итак 20-30 тыс. записей = 20-30 тыс. вызовов функции. Или знаете другой пример, прошу привести Заранее благодарен ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:49 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_XПричина - архитектурного характера, функция будет находиться в базе но не будет иметь непосредственной связи с базой Что мешает эту связь добавить? Вы понимаете, что вы хотите свою собственную БД на базе текстового файла внутри уже существующей БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 16:51 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_XСледующая запись SQL снова вызывает функцию - распар-е - возврат результата , очистка. Итак 20-30 тыс. записей = 20-30 тыс. вызовов функции. 1) Традиционный способ. Распарсить, вызвать N-раз функцию в пределах SQL, очистить память (или руками или при окончании сессии Oracle). Oracle под рукой нет, да и приложение Ваше не знаю, но парсить 20-30 тыс. раз на каждое обращение в SELECT - это жесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:08 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Более чем понимаю..... мне нужна единая JAR библиотека, которая будет вызываться интегрироваться и вызываться не только из базы., а из под Windows Соответственно эдакой набор констант приходиться держать во внутри исполь-го файла. Увы.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:17 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
Но не в виде же текста, в конце концов! И падеж типов в коде, тоже доставляет. Параметр с типом int, а парсинг и сравнение идет с Double ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:24 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_X, Тогда вам нужна любая легковесная БД типа SQLite, HSQL, H2, JavaDB/Derby. Можно её, конечно, написать самому, но зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:27 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
Ну и на худой конец, откройте хотя бы для себя паттерн Singleton Желательно почитать, что значит слово cache. Но тут советовать не берусь, т.к. не знаю Ваши объемы данных, где все это будет исполняться и насколько много разных ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:28 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:31 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
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. Прошу Вас описать Ваше предложение на маленьком примере ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:32 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_X, По поводу текущего кода. - Загрузите данные в память, а не читайте из ресурсов. - Используйте любой простейший индекс для kind. Хотя бы HashMap. В принцпе, если записей в каждом kind не много, то итерация по одной группе будет достаточно быстрой. Но можно и внутри каждого kind сгруппировать следующий параметр и оптимизировать его поиск аналогичным способом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:35 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
BlazkowiczHOME_X, Тогда вам нужна любая легковесная БД типа SQLite, HSQL, H2, JavaDB/Derby. Можно её, конечно, написать самому, но зачем? Как это ставить на N- пользовательских ПК ? Разрешение СБ и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:35 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_XПрошу Вас описать Ваше предложение на маленьком примере 1. Загрузку и разбор по строкам и по полям нужно делать один раз для всех данных. Результат хранить в статическом поле. Надо вообще почитать как именно там Oracle экземплярами JVM управляет. Могут быть нюансы. Это уже вам даст огромный прирост скорости. Если этого не достаточно, оптимизируйте перебор. 2. То что вы загрузили, поместите в структуру HashMap<String, MyDomainModelTextFileRecordName>. Заполняйте её при чтении в п.1, так чтобы ключом сделать, например, группу. Померяйте производительность ещё раз. Если снова недостаточная, можно сделать 3. второй индекс HashMap<String, HashMap<String, MyDomainModelTextFileRecordName>>, где первый ключ это kind, а второй - че у вас там в первой колонке. Сколько у вас таких файлов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:42 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_XBlazkowiczHOME_X, Тогда вам нужна любая легковесная БД типа SQLite, HSQL, H2, JavaDB/Derby. Можно её, конечно, написать самому, но зачем? Как это ставить на N- пользовательских ПК ? Разрешение СБ и т.д. Embedded. Точно так же как вы подключаете jar вашего проекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:43 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev можно и самому в коде перебрать, еще и быстрее будет (если работать в памяти и руки иметь прямые) как хранить поток, изначально описать как типовой массив ? на 40 тыс. записей Если это "...Хотя бы HashMap...." откуда его грузить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:43 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_XЕсли это "...Хотя бы HashMap...." откуда его грузить ? ? Из вашего файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:44 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_X1. java класс внедрен в базу Oracle 2. заведен тип базы который отвечает за связь с эти классом 3. делаем вызов SQL запроса, который ссылается на этот тип базы Сколько много умных слов, что бы в результате породить вызов одной функции. Blazkowicz- Загрузите данные в память, а не читайте из ресурсов. Вот и я об этом! 1) При этом, создавать классы Home_X вроде умеет (я такого в Oracle не умею) Ну загрузи ты в конструкторе ресурс, а в ф-ции обработки (разумеется НЕ static) им и пользуйся Ну и понятное дело, не понятно, нафига нужно создавать экземпляр на каждую исходную запись. 2) Даже не умея создавать классы/экземпляры, никто не мешает сделать Singleton и там закешировать загруженный ресурс. Жить правда будет наверное до конца Oracle сесии, т.ч. это опасная идея (смотря как реализовать) - но в качестве костыля, вполне. IMHO p.s. Примера не будет, Oracle под руками нет, да и желания нет. Я лучше пива выпью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:51 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_X, Если у вас файлов много, то добавьте внутри них свой индекс, чтобы не читать каждую строку, а по индексу быстро найти нужный блок файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:53 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
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 тыс. записей. Верно ли Вас понимаю - так разве возможно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:54 |
|
||
|
Поиск по ресурсам
|
|||
|---|---|---|---|
|
#18+
HOME_XБолее чем понимаю..... мне нужна единая JAR библиотека, которая будет вызываться интегрироваться и вызываться не только из базы., а из под Windows Я бы всё равно делал на JDBC, и выбирал бы базу из контекста. Если Oracle - читаем из Oracle, если нет, читаем через любую легковесную встроенную БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2016, 17:55 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39265489&tid=2123928]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
6ms |
get forum data: |
4ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 322ms |

| 0 / 0 |
