ORMlite로 매핑 된 데이터베이스 테이블이 있는데, 일부 데이터 (18 열)가 포함되어 있으며 ForeignCollectionField(eager = true)
도 포함되어 있습니다.외국 컬렉션을 열망하는 방법을 빠르게하려면?
문제는이 테이블의 모든 데이터를로드하는 중입니다 ... ORMlite는 조인을 사용하는 대신 모든 항목에 대한 쿼리를 만듭니다. 67124 개의 쿼리가 발생하고이 테이블의 모든 개체를로드하는 데 시간이 오래 걸립니다.
그러나 이것은 몇 초 내에 오른쪽 조인 쿼리에서 수행 될 수 있습니까? 대신 수천 개의 쿼리를 생성해야하는 이유는 무엇입니까?
어떻게 속도를 높일 수 있습니까? 원시 쿼리와 RawRowMapper를 작성해야 ORM을 무의미하게 사용하게됩니다.
ormlite에서 열렬한 컬렉션을로드하는 방법을 다루는 방법은 무엇입니까? queryForAll
이 방법이 아니기 때문에 ..
왜 모든 데이터를로드하려고합니까? ORM은보고 또는 ETL을 의미하지 않으며 "모든 데이터로드"에 대한 유일한 타당한 이유입니다. 이를 위해 저장 프로 시저 또는 뷰를 사용하십시오. 당신이 설명하는 것은'N + 1' 문제입니다. 열심히 로딩을 사용하여 해결해야합니다. 어떻게 쿼리를 만들고 매핑을 정의 했습니까? –
PS ORMs * 정말로, 정말로 *보고 또는 ETL을위한 것이 아닙니다. 이것은 단지 학술 토론 일뿐입니다. 도메인 논리를 적용하지 않을 때 행과 값을 객체로 변환하면 아무런 이득도 얻지 못합니다. –
이 경우 모든 데이터를로드해야합니다. 모든 데이터는 나중에 3D 그래프로 표시되고 시뮬레이션에 사용됩니다 ...이 뒤에 큰 도메인 논리가 있습니다. 이 테이블은 훨씬 더 많은 컬럼을 가지고 있고 전체 데이터베이스는 훨씬 더 많은 테이블을 가지고 있습니다. 그러나 이번에는 모든 것을로드해야하고 느린 것 .. 어쨌든 큰 도메인 로직이 없을지라도 처음부터 모든 데이터를로드하더라도 데이터베이스는 여전히 좋은 방법입니다 전체 XML 파일을 다시 쓰는 대신 런타임시 열을 업데이트 할 수 있으므로이 데이터를 저장합니다. –