Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по ORM / 25 сообщений из 59, страница 1 из 3
03.03.2016, 11:10
    #39184575
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
Добрый день
в меня вопрос по MyBatis, Hibernate, EclipseLink
Когда мы далем SELECT * FROM users, то нам возвращант List<Users> users.

Вопрос такой:
Делают указание выше ORM перед основным запросом COUNT(*) запрос, чтоб узнать размер будушего List?
...
Рейтинг: 0 / 0
03.03.2016, 12:05
    #39184655
xifr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111,

если я правильно понял вопрос, то
делают отдельным запросом
...
Рейтинг: 0 / 0
03.03.2016, 12:29
    #39184718
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
xifr,
Я когда создаю List<MyObject> l = new ArrayList<>(1234)
Стараюсь всегда указывать размер списка чтоб не пересоздавать потом список
Так же из запросами SELECT нужно зать размер списка на перед
...
Рейтинг: 0 / 0
03.03.2016, 12:31
    #39184720
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
можете просто users.size();
...
Рейтинг: 0 / 0
03.03.2016, 12:32
    #39184723
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111Я когда создаю List<MyObject> l = new ArrayList<>(1234)
Стараюсь всегда указывать размер списка чтоб не пересоздавать потом список
Так же из запросами SELECT нужно зать размер списка на перед
Я когда читаю такие комментарии, стараюсь не плакать.

1234 это не размер списка, а capacity, актуальный только для реализации в виде ArrayList
Hibernate использует свои собственные коллекции, так как в них куча функциональности ещё навернуто.
...
Рейтинг: 0 / 0
03.03.2016, 12:39
    #39184744
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
Blazkowicz,

Ну вот, это я и хочу узнать

Бо иногда я работаю из чистым JBDC

И делаю примерно так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  public List<ProDbRow> findProDbRows() {
        String query = "SELECT * FROM table";
        List<ProDbRow> result = new ArrayList<>(findCountProDbRows());
             // filing PraparedStatemens
        // get data from ResultSet and fill result list
        return null;
    }

    public int findCountProDbRows() {
        String query = "SELECT COUNT(*) FROM table";
             //...
        //...
        return 343434;
    }

 
...
Рейтинг: 0 / 0
03.03.2016, 12:43
    #39184749
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
Да уж...
IMHO в большинстве СУБД count(*) будет выполняться значительно дольше, чем коллекция себя 100500 раз перересайзит.
...
Рейтинг: 0 / 0
03.03.2016, 12:48
    #39184758
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111Blazkowicz,

Ну вот, это я и хочу узнать

Бо иногда я работаю из чистым JBDC

И делаю примерно так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  public List<ProDbRow> findProDbRows() {
        String query = "SELECT * FROM table";
        List<ProDbRow> result = new ArrayList<>(findCountProDbRows());
             // filing PraparedStatemens
        // get data from ResultSet and fill result list
        return null;
    }

    public int findCountProDbRows() {
        String query = "SELECT COUNT(*) FROM table";
             //...
        //...
        return 343434;
    }

 



и это все для получения количество строк?
а что мешает Вам использовать тот же size();
...
Рейтинг: 0 / 0
03.03.2016, 12:52
    #39184770
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
Leonid Kudryavtsev,

Понял что нужно пересмотреть Java Collection))


Ну пересоздавать много раз ArrayList мне определенно не нравиться все таки

Может кто-то знает хорошый подход в заполнении коллекций когда делаем SELECT?
...
Рейтинг: 0 / 0
03.03.2016, 12:53
    #39184773
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111Бо иногда я работаю из чистым JBDC
И делаю примерно так:

Денис, вы делаете мне больно.
Что именно вы пытаетесь таким образом сэкономить? CPU? IO? Память? Нет ни одного параметра по которому бы SQL запрос выиграл бы у нескольких десятков копирований массива в памяти.
...
Рейтинг: 0 / 0
03.03.2016, 12:55
    #39184780
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
Музаффар,


Стартовой размер ArrayList 10

Если виборка 234 рядка то масив в ArrayList много раз будет создаватся заново.
...
Рейтинг: 0 / 0
03.03.2016, 12:57
    #39184785
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111Понял что нужно пересмотреть Java Collection))

И доклады Шипилёва и Куксенко.

denis111111Ну пересоздавать много раз ArrayList мне определенно не нравиться все таки

Ну, если мы в данном конкретном месте знаем примерный размер ожидаемых коллекций, то можно впендюрить некую средне минимальную capacity.
...
Рейтинг: 0 / 0
03.03.2016, 12:59
    #39184787
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111Если виборка 234 рядка то масив в ArrayList много раз будет создаватся заново.
Тебе домашнее задание - посчитать сколько именно раз это самое "много" и сколько миллисекунд оно занимает.
...
Рейтинг: 0 / 0
03.03.2016, 13:01
    #39184793
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
Blazkowiczdenis111111Бо иногда я работаю из чистым JBDC
И делаю примерно так:

Денис, вы делаете мне больно.
Что именно вы пытаетесь таким образом сэкономить? CPU? IO? Память? Нет ни одного параметра по которому бы SQL запрос выиграл бы у нескольких десятков копирований массива в памяти.

Насколько я понял, вы говорите что нет смысла делать дополнительной COUNT чтоб узнать размер ArrayList?

Мой подход определенно не лучший (может нужно использывать другие реализации списка), но мне кажется нужно всегда задавать розмер ArrayList.

Как делаете вы?
...
Рейтинг: 0 / 0
03.03.2016, 13:05
    #39184805
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111но мне кажется нужно всегда задавать розмер ArrayList.
денис, ты не пьян случайно? что значит "тебе кажется"? массивы со списками не путаешь, нет?
...
Рейтинг: 0 / 0
03.03.2016, 13:09
    #39184813
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
chpasha,
Внутри ArrayList есть Object[]
...
Рейтинг: 0 / 0
03.03.2016, 13:10
    #39184815
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111,
а о каком количестве записей идёт речь? и каком размере данных в котором призводится подстчёт count?
...
Рейтинг: 0 / 0
03.03.2016, 13:11
    #39184816
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
chpasha,

спасибо, поржал...
...
Рейтинг: 0 / 0
03.03.2016, 13:17
    #39184831
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
Blazkowiczdenis111111Если виборка 234 рядка то масив в ArrayList много раз будет создаватся заново.
Тебе домашнее задание - посчитать сколько именно раз это самое "много" и сколько миллисекунд оно занимает.
ну если вести аналогию со сбором строки - то тормозить буде шикарно.
...
Рейтинг: 0 / 0
03.03.2016, 13:17
    #39184832
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111Насколько я понял, вы говорите что нет смысла делать дополнительной COUNT чтоб узнать размер ArrayList?

Я говорю что SQL запрос это ну ооочень ресурсозатратно по сравнению с созданием десятка-другого копий массива.

denis111111Мой подход определенно не лучший

Скажем так, откровенно плохой. Ответь хотя бы на простой вопрос. Сколько времени у тебя занимает выполнение этого SQL запроса из Java.

denis111111(может нужно использывать другие реализации списка)

Не нужно. Операции с массивами реализованы на уровне CPU, поэтому ArrayList даёт фору всем остальным коллекциям.

denis111111, но мне кажется нужно всегда задавать розмер ArrayList.

Это не "розмер". Это "вместимость".

denis111111Как делаете вы?
Не занимаюсь превентивными оптимизациями.
...
Рейтинг: 0 / 0
03.03.2016, 13:18
    #39184834
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
вадяBlazkowiczпропущено...

Тебе домашнее задание - посчитать сколько именно раз это самое "много" и сколько миллисекунд оно занимает.
ну если вести аналогию со сбором строки - то тормозить буде шикарно.
Ну, можно ещё аналогию с копированием файла на жестком диске провести. И массу других аналогий. Толку от них?
...
Рейтинг: 0 / 0
03.03.2016, 13:19
    #39184835
xifr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111Leonid Kudryavtsev,
Понял что нужно пересмотреть Java Collection))
Ну пересоздавать много раз ArrayList мне определенно не нравиться все таки
Может кто-то знает хорошый подход в заполнении коллекций когда делаем SELECT?

1) В общем случае, когда вы делаете select * в БД, то в момент его выполнения и даже в процессе выгрузки вам данных,
БД может не знает конечный размер данных, его размер будет известен только после окончания выгрузке (это на стороне БД)
И на клиенте, вы точно ни как это не сделаете (одним запросом)

2) Как я помню в JPA когда получаешь колекцию никакой ArrayList заранее инициализировать не надо, он возврощается по факту,
и возвращается List (не факт что это будет ArrayList )

3) Если вы делаете через jdbc, то на заморачиватся с размерами ArrayList самое бесполезное занятие.
Как аргумент, можете посмотреть сорцы Hibernate, где вытаскиваются коллекции.
...
Рейтинг: 0 / 0
03.03.2016, 13:20
    #39184837
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111chpasha,
Внутри ArrayList есть Object[]
ладно. давай по-другому: в какой книжке или в каком месте ты прочитал, что в списках нужно всегда задавать размер явно?
и еще: какая ошибка происходит, когда ты не задаешь размер? у тебя программа начинает тормозить?
...
Рейтинг: 0 / 0
03.03.2016, 13:22
    #39184839
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
denis111111Внутри ArrayList есть Object[]
И что? )))

BlazkowiczТебе домашнее задание - посчитать сколько именно раз это самое "много" и сколько миллисекунд оно занимает.
+

МассивоСписок, это почти как КотаПес
...
Рейтинг: 0 / 0
03.03.2016, 13:28
    #39184851
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по ORM
chpashaв какой книжке или в каком месте ты прочитал, что в списках нужно всегда задавать размер явно?
denis111111 но мне кажется нужно всегда задавать розмер ArrayList.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по ORM / 25 сообщений из 59, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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