powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate и in memory calc
6 сообщений из 31, страница 2 из 2
hibernate и in memory calc
    #38903980
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevAlexey TominНе сходится.
Если из 2..6 часов чтение с диска занимает 10-15 минут, то что делает сервер остальное время?
....
sanBez...это аццкий отжиг. Админа ораклового вам надо...
поддерживаю sanBez. Запускать реальный код, смотреть на чем тормозит, _те_куски_ которые тормозят и оптимизировать.

я же вроде подробно разложил? в чем проблема. у оракла своя сфера применения, я лучше чем кто-либо другой эту сферу знаю. проблема в том, что для такой задачи не нужен оракл. задачи не нужна его сложная структура блока, которая резервирует место на заголовок, блокировки и прочую дребедень. задачи не нужен навороченный оракловый оптимизатор, не нужно построчное хранение. почти ничего в чем силен оракл не нужно. я уже написал один раз, повторюсь, оптимизатор оракла применяет fullscan если запросу необходимо более 25% блоков и блоков нет в кеше. выходит, что показатель1 читает таблицу, показатель2 читает другую, вытесняет блоки первой, потом показатель3 снова вынужден читать с диска таблицу1. что и почему понятно. оптимизировать можно, можно увеличить размер блока, уменьшить кол-во слотов в блоке, расставить близкие показатели друг за другом. да этим наверно займемся, но сюда я пришел с другой задачей. у меня задача посмотреть на in-memory вариант и прокачать джава скилы. давайте на джава сосредоточимся.
...
Рейтинг: 0 / 0
hibernate и in memory calc
    #38904038
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1я же вроде подробно разложил? в чем проблема. у оракла своя сфера применения, я лучше чем кто-либо другой эту сферу знаю.

Весьма смелое заявление.

hck1я уже написал один раз, повторюсь, оптимизатор оракла применяет fullscan если запросу необходимо более 25% блоков и блоков нет в кеше. выходит, что показатель1 читает таблицу, показатель2 читает другую, вытесняет блоки первой, потом показатель3 снова вынужден читать с диска таблицу1

Стоп. Если стран много (я так понял, больше десятка), а данные разных стран лежат в разных партициях, то не может быть, чтобы ради каждой страны поднималось более 25% строк таблицы.

hck1но сюда я пришел с другой задачей. у меня задача посмотреть на in-memory вариант и прокачать джава скилы. давайте на джава сосредоточимся.

Надо понимать, что никто не пришёл сюда ради помощи hck1. Кто-то мозги чешет интересными задачками, кто-то своё самолюбие.
Так что на чём бы Вы не хотели сосредоточится- я всё одно не понимаю, почему вдруг java тут сильно ускорит дело...
...
Рейтинг: 0 / 0
hibernate и in memory calc
    #38904080
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominСтоп. Если стран много (я так понял, больше десятка), а данные разных стран лежат в разных партициях, то не может быть, чтобы ради каждой страны поднималось более 25% строк таблицы.
у SE редакции нет партиций. данные стран лежат в разных схемах и даже в разных таблеспейсах, я об этом упоминал тут
hck1P.S. у каждой страны свой набор данных (даже таблеспейс) и свой набор показателей, обрабатываются страны независимо, часто параллельно.
у стран схожи 70% таблиц, но не идентичны. где-то чуть шире таблички, где-то чуть меньше полей. размер полей у стран может быть разным.
...
Рейтинг: 0 / 0
hibernate и in memory calc
    #38904225
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1Alexey TominСтоп. Если стран много (я так понял, больше десятка), а данные разных стран лежат в разных партициях, то не может быть, чтобы ради каждой страны поднималось более 25% строк таблицы.
у SE редакции нет партиций. данные стран лежат в разных схемах и даже в разных таблеспейсах, я об этом упоминал тут
hck1P.S. у каждой страны свой набор данных (даже таблеспейс) и свой набор показателей, обрабатываются страны независимо, часто параллельно.
у стран схожи 70% таблиц, но не идентичны. где-то чуть шире таблички, где-то чуть меньше полей. размер полей у стран может быть разным.

Но при этом
hck1выходит, что показатель1 читает таблицу, показатель2 читает другую, вытесняет блоки первой, потом показатель3 снова вынужден читать с диска таблицу1

А! Понял. Страны-то разные, но "показатели" читают одно и то же.
Тогда sql должен читать таблицу1 и собирать его сразу в несколько агрегатов.
Скорее всего в готовые показатели это не соберётся, но это не беда- собрать во временную таблицу (небольшую) и из неё- в показатели.
...
Рейтинг: 0 / 0
hibernate и in memory calc
    #38939837
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, что-то мои расчеты на компактность объектов жава в сравнению с субд совсем не оправдываются. я сгенерил с помощью NetBeans классы из базы данных для хибера. заменил LAZY на EAGER, запустил с такими параметрами -XX:MaxHeapSize=11g -XX:PermSize=256m. вылетело так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at org.hibernate.internal.util.collections.IdentityMap.entryArray(IdentityMap.java:164)
        at org.hibernate.internal.util.collections.IdentityMap.concurrentEntries(IdentityMap.java:75)
        at org.hibernate.engine.internal.StatefulPersistenceContext.clear(StatefulPersistenceContext.java:237)
        at org.hibernate.internal.SessionImpl.cleanup(SessionImpl.java:598)
        at org.hibernate.internal.SessionImpl.close(SessionImpl.java:379)
        at com.testcompany.testPROG.main(testPROG.java:91)
погуглил, добавил еще такой -XX:-UseGCOverheadLimit, начало работать дольше, но вылетает так же. тогда решил посмотреть сколько удалось запихнуть. поставил println и вернул LAZY в хибернейту. вылетает где-то на 250к объектах, при том, что я хотел в 11гб запихнуть 6 млн, т.к. в оракле эти данные 10гб занимают. кроме этого процесс идет чудовищно медленно, часы

Код: 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.
public class testPRG {
   private static SessionFactory factory; 
   public static void main(String[] args) {
      BigDecimal myAmount=new BigDecimal("0"); 
      int i = 0;
      try{
         factory = new AnnotationConfiguration().
                   configure().
                   //addPackage("com.xyz") //add package if used.
                   addAnnotatedClass(Customers.class).
                   buildSessionFactory();
      }catch (Throwable ex) { 
         System.err.println("Failed to create sessionFactory object." + ex);
         throw new ExceptionInInitializerError(ex); 
      }
      // Customers cust = new Customers();
      Date dNow = new Date( );
      SimpleDateFormat ft = 
      new SimpleDateFormat ("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
      System.out.println("Current Date: " + ft.format(dNow));

      System.out.println("Started!");
      
      Session session = factory.openSession();
      Transaction tx = null;
      try{
         tx = session.beginTransaction();
         List cust_array = session.createQuery("FROM Customers").list(); 
         for (Iterator iterator = 
                           cust_array.iterator(); iterator.hasNext();){
            Customers cust = (Customers) iterator.next(); 
            i++ ;
            dNow = new Date( );
               
            if (i % 1000 == 0 ) {
              System.out.println("Row "+i+" "+ ft.format(dNow));
            }        
            
            Set<CaseCustomers> cacuList = cust.getCaseCustomerses() ;
            
            for (Iterator iterator2 = 
                              cacuList.iterator(); iterator2.hasNext();){
               CaseCustomers cacu = (CaseCustomers) iterator2.next(); 
               Set<Bookings> bookList = cacu.getBookingses() ;
                for (Iterator iterator3 = 
                                  bookList.iterator(); iterator3.hasNext();){
                   Bookings book = (Bookings) iterator3.next(); 
                   myAmount = myAmount.add(book.getAmount());
                }
            
            }      
         }
         // tx.commit();
         System.out.println("Total book Amount: " + myAmount.setScale(2).toPlainString());
         
         Date dNow2 = new Date( );
         System.out.println("Job finished: " + ft.format(dNow2));
      }catch (HibernateException e) {
         if (tx!=null) tx.rollback();
         e.printStackTrace(); 
      }finally {
         session.close(); 
      }
   }



запускал профайлер от NetBeans, выглядит что вся проблема в том, что ресурсы уходят на работу GC.
сейчас попробовал отключить L2 кеш у хибера, подозреваю если и поможет, то не принципиально. может я что-то делаю принципиально не так ?
и второй вопрос, я верно понимаю, что с EAGER хибернейт не будет долбить в цикле запросы, как это я наблюдаю с LAZY. будет один большой запрос или так и продолжит долбить в цикле на каждого Customer запросом для Bookings ?
...
Рейтинг: 0 / 0
hibernate и in memory calc
    #38940007
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наверно я понял почему мой фокус не удался. java ведь при инициализации объекта резервирует память на тот размер, какой продефинирован в классе, а в оракле данные хранятся более компактно. если в оракловом Number(12) храниться 0, то это всего 2 байта на диске, в то время как в Java объекте у меня заняло 32-бит (BigDecimal).
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate и in memory calc
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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