Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Java |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 3 [4] 5 вперед Ctrl→ все |
asv79 Member Откуда: Тверь Сообщений: 3090 |
если бы не достаточно было -ошибка бы вывалилась вот сама сущность @Data @Entity(name = "ticket") public class TicketEntity { @Id private Long number; @ElementCollection(targetClass = Long.class, fetch = FetchType.LAZY) @CollectionTable(name = "numbers", joinColumns = @JoinColumn(name = "number")) private List<Long> numbers; } если фетч стоит lazy я нормально выбираю все,но потом не могу получить листы с nambers если фетч ставлю eger то все привет-виснет на глушняк |
||
24 окт 19, 17:05 [22001902] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
да косяков то нет ,проблема в фетче я так понимаю |
||
24 окт 19, 17:06 [22001906] Ответить | Цитировать Сообщить модератору |
вадя Member Откуда: Екатеринбург Сообщений: 18768 |
|
||
24 окт 19, 17:07 [22001908] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51154 |
Вот забегая вперед. Тебе repo.findAll() зачем нужен? Тоесть что ты будешь делать потом со всей коллекцией всех своих билетов? |
24 окт 19, 17:09 [22001910] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
класть их номера в лист и выявлять какой процент каждой цифры поставил фетч лейзи вытянул билеты сейчас уже минут 5 пытаюсь достать цифры -это 300000 записей где то даже поболе не пойму толи комп дохлый толи что ,ну не должно так долго это быть явно же |
||
24 окт 19, 17:14 [22001914] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
облегчил хиберу задачу-взять все тикеты и у первых 100 тикетов выбрать номера и положить их в лист 3 минуты делал) итого на 10800 воросов (325000 записей) нужно минут 40))это чо за прикол |
24 окт 19, 17:21 [22001923] Ответить | Цитировать Сообщить модератору |
ivanra Member Откуда: Сообщений: 889 |
asv79, foreign key - то в базе есть? |
24 окт 19, 17:22 [22001926] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
есть как же без него |
||
24 окт 19, 17:27 [22001931] Ответить | Цитировать Сообщить модератору |
ivanra Member Откуда: Сообщений: 889 |
asv79, если хочется жадно выбрать все 10000 записей с вложенными элементами, то в findAll надо написать селект с джойном, типа такого
"select t from ticket t join fetch t.numbers"
|
24 окт 19, 17:34 [22001936] Ответить | Цитировать Сообщить модератору |
вадя Member Откуда: Екатеринбург Сообщений: 18768 |
|
||
24 окт 19, 17:42 [22001937] Ответить | Цитировать Сообщить модератору |
забыл ник Member Откуда: Сообщений: 3514 |
Да что ты понимаешь? Зато не переедешь с mysql на Oracle если вдруг понадобится. На всякий - </sarcasm> |
||||
24 окт 19, 17:48 [22001943] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
ivanra,да он нормально выбирает,но очень долго |
24 окт 19, 17:54 [22001956] Ответить | Цитировать Сообщить модератору |
вадя Member Откуда: Екатеринбург Сообщений: 18768 |
даже если переедешь на Oracle или mssql это не ускорит. так что есть ли смысл в переезде? потому как хибер не зависит от субд.... |
||
24 окт 19, 17:57 [22001959] Ответить | Цитировать Сообщить модератору |
забыл ник Member Откуда: Сообщений: 3514 |
П.C. Не помогло... |
24 окт 19, 17:58 [22001960] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51154 |
Коробочное решение этой проблемы - это pagination. Тоесть разбивание выборки на страницы. SELECT select_list FROM table_expression [LIMIT { number | ALL }] [OFFSET number] Но это базе не нужно. Это нужно веб-серверу или юай чтоб он не умер от испуга. Вот так. Или если-б ты работал с ResultSet напрямую то ты некоторые калькуляции бы выполнял one-by-one. Тоесть в режиме последовательной обработки как работают со Streams. В 90% случаев мне удавалось написать такой SQL запрос который делает все из коробки. В том числе и твою аналитику. И расчет средних. И корреляции и дисперсии и прочее. Даже без включения Java. Вообще современная Dbms такая как MS_SQL и Oracle делает все вычисления в контексте SQL машины и выдавая в Java только резалт. Так-же работает и PL/SQL машина в оракле. Она старается избавить программиста от коллекций. Предлагая ему универсальный шаблон процессинга данных бесконечного размера. Типа (скопипащено отсюда https://gerardnico.com/lang/plsql/open_for) OPEN emp_cv FOR sql_stmt USING my_job; LOOP FETCH emp_cv INTO emp_rec; EXIT WHEN emp_cv%NOTFOUND; -- process record END LOOP; CLOSE emp_cv; Ты же решил в Java делать бигдату и сам попался. Ну не на 300 тыщях так на 3 лямах ты все равно упадешь и Хибер тут будет тоже непричем. А причем здесь будет изначальная постановка задачи. А именно ЧТО ТЫ СЧИТАЕШЬ? Каков метод и алгоритм. Обсуди в форуме метод и алгоритм твоих билетов! Безотносительно хибера и базы. |
||||
24 окт 19, 18:14 [22001982] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51154 |
В тему стримов вот еще почитай как тут пишут. https://blog.madadipouya.com/2019/03/26/high-performance-data-fetching-using-spring-data-jpa-stream/ public interface BookRepository extends Repository<Book, Long> { Stream<Book> getAll(); } |
24 окт 19, 18:33 [22002009] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
я просто удивлен почему так медленно,даже 100 билетов ( в которых по 30 Long ) итого 3000 лонгов достает около 3 минут у меня не падет ни хибер ни сервер ничего,просто тупо очень долго но оно и правильно,не спроста же придумали Lazy а вообще мне не нужно обращаться к таблице ticket мне нужно обратиться вот к этой таблице
@ElementCollection(targetClass = Long.class, fetch = FetchType.LAZY)
@CollectionTable(name = "numbers", joinColumns = @JoinColumn(name = "number"))
private List<Long> numbers;
надо просто загуглить как в рамках хибернейта к такого рода таблицам обращаться можно |
||
24 окт 19, 18:52 [22002022] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51154 |
asv79, еще раз. Твоя проблема не в Хибере а в постановке задачи. Ты решаешь не задачу билетов а технологиеское нагромождение технологий 90% из которых тебе в принципе не нужна. Ты втащил их просто по приколу. Вот сделай чистую рафинированную задачи билетов. Как на контестерах. Запаблиши ее в Программирование. И тебе ее решат ра 2 секунды на каком-нить Паскале. Разумеется я отсюда исключил парсинг сайта. Ведь это вообще другая задача верно? |
24 окт 19, 18:57 [22002025] Ответить | Цитировать Сообщить модератору |
chpasha Member Откуда: Сообщений: 10426 |
нужен бейджик "не понимаю сарказм" рядом с именем мембера ![]() |
||
24 окт 19, 19:05 [22002028] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
это все одна задача взять с сайта билеты положить их в базу ,а затем произвести над ними некие манипуляции,назовем их аналитикой тоесть проблем никаких нет - все работает ,и даже билеты выбираются мгновенно но вот когда я циклом прохожусь по этим билетам и берут с каждого билета свой лист с 30 Long вот тут хибер и спотыкается решения этой задачи -простое обращаться напрямую к таблице коллекции надо посмотреть как это делается и все) я не пойму про какие вычисления ты говоришь -найти плохие цифры? у меня это две строчки кода и хешмапа |
||
24 окт 19, 19:08 [22002029] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51154 |
(устало) Зачем тебе хеш-мапа когда у тебя база данных? |
||
24 окт 19, 19:09 [22002030] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
затем что в рамках хибера у меня ограничен функционал) |
||||
24 окт 19, 22:37 [22002127] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51154 |
Как будет угодно. Видимо тебе не нужно решать задачу билетов. Тебе хочется играть с хибером. Разве-ж я могу помешать если просто хочется? |
25 окт 19, 09:05 [22002220] Ответить | Цитировать Сообщить модератору |
asv79 Member Откуда: Тверь Сообщений: 3090 |
какая задача у билетов? пс.уже все куплено,за ночь компухтер определелил те цифры ,которые встречаются чаше других |
||
25 окт 19, 11:40 [22002386] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51154 |
Вот прикинь. Владельцы игорного бизнеса (покер клубы, казино и лотереи в том числе) - обычно выходцы из преступного мира. И тут вдруг (!) внезапно они узнают что какой-то пиздюк (я говорю не о тебе а просто образно) на публичном форуме хачит и ломает их бизнес. И делает публичной их подноготную. Тут есть разные варианты развития событий. До тех пор пока ты не создал им проблем - ты никому не нужен. Но если... короче думай сам. |
25 окт 19, 12:02 [22002412] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 2 3 [4] 5 вперед Ctrl→ все |
Все форумы / Java | ![]() |