데이터베이스에 저장이 너무 느립니다(분당 10,000개 레코드).<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />270,000개의 레코드와 72개의 열이 있는 JMP 테이블이 있습니다.
ODBC를 통해 데이터베이스에 저장하려고 하는데 프로세스가 너무 느립니다. 분당 레코드가 약 10,000개입니다(예, 분당 오타가 아닙니다).
Microsoft SQL Server 2014와 PostgreSQL 9.3 서버 모두로 내보내려고 했습니다. 속도(또는 부족함...)는 두 경우 모두 동일합니다. 또한 두 서버 모두 제가 JMP를 실행하고 있는 워크스테이션과 같은 건물에 있습니다. 나는 두 서버에 액세스할 수 있는 유일한 사용자이기 때문에 그들이 다른 일로 바쁘지 않다는 것을 알고 있습니다.
속도가 느린 것은 JMP가 텍스트 필드의 길이를 파악하려고 했기 때문일 것이라고 생각하여 텍스트 열을 모두 제거하고 숫자 필드만 남겼으나 속도는 동일합니다.
ODBC를 통해 어느 데이터베이스에서나 비슷한 크기의 테이블을 검색하는 경우 20초 미만이 소요됩니다.
ODBC 또는 JDBC를 통해 두 데이터베이스에 쓰는 ETL 도구는 훨씬 더 빠릅니다.
데이터베이스에 더 빠르게 쓸 수 있는 방법에 대한 생각이 있으신가요? 현재로서는 기능이 너무 느려 사실상 사용할 수 없습니다.
감사합니다.
Re: 데이터베이스에 저장이 너무 느립니다(분당 10,000개 레코드).데이터베이스 상호작용과 관련하여 JMP 13에서는 상당히 많은 개선이 이루어졌습니다.그 중 하나는 데이터베이스>테이블 저장 옵션입니다.
JMP 13에서는 이제 이를 지원하는 데이터베이스(대부분)에 대해 여러 행이 삽입(대량 삽입)됩니다.JMP 13 데이터베이스 상호 작용 개선 사항에는 열 이름과 대소문자(가능한 경우) 보존뿐 아니라 TIMESTAMP 정보 보존도 포함됩니다.
Re: 데이터베이스에 저장이 너무 느립니다(분당 10,000개 레코드).나는 데이터베이스> 테이블 저장 옵션을 사용한 적이 없습니다.사실 저는 이 게시물을 읽기 전까지는 그것이 존재하는지 몰랐기 때문에 공통 작업에 대한 여러 기능을 직접 작성했습니다.나는 그들이 느리다고 생각하지만 적어도 이 스레드의 어떤 것보다 더 나은 속도를 자랑할 수 있습니다.
내 BulkInsert 기능은 다음과 같습니다.
//데이터베이스에 테이블을 삽입합니다..테이블 --ncols가 일치한다고 가정합니다.
대량 삽입 = 기능 ({ 디비 , DB테이블 , dt } , { 기본 로컬 } ,
//db - 데이터베이스 연결
//dbTable = 데이터베이스 테이블
//dt - JMP 데이터 테이블
numCols = NCol ( dt ) ;
행 수 = N행 ( dt ) ;
~을 위한 ( 나 = 1 , 나 <= 행 수 , 나 ++,
값 목록 = {} ;
~을 위한 ( 제이 = 1 , 제이 <= numCols , 제이 ++,
만약에 ( 날짜 ( 열 ( dt , 제이 )) ,
에 집어 넣다 ( 값 목록 , 숯 ( 체재 ( 열 ( dt , 제이 )[ 나 ] , "ddMonyyyy h:m:s" )))
,
에 집어 넣다 ( 값 목록 , 열 ( dt , 제이 )[ 나 ])
) ;
) ;
값텍스트 = 대리자 ( 숯 ( 값목록 ) , "{" , "(" , "}" , ")" , "\!"" , "'" ) ;
대체하다 ( 값텍스트 , ".," , "없는," ) ;
SQL_문자열 = "에 집어 넣다 " || DB테이블 || "\!N" ||
"가치" || 값텍스트 ;
SQL 실행 ( 디비 , SQL_문자열 ) ;
) ;
) ;
여기에서 찾을 수 있도록 제가 작성한 isDate 함수가 필요합니다. 열이 날짜/시간인지 쉽게 알 수 있는 방법이 있습니까?
또는 날짜/시간 열이 없으면 코드의 해당 부분을 주석 처리할 수 있습니다.
Re: 데이터베이스에 저장이 너무 느립니다(분당 10,000개 레코드).현재는 2016년이고 여러 버전이 이후 버전입니다. 그리고 느린 것을 확인할 수 있는데 제 경우에는 분당 200개의 레코드가 나옵니다. 16.064.704개의 레코드가 있으면 데이터베이스에 제출하는 데 2개월이 걸립니다. 취소 버튼이 작동하지 않으며 유일한 방법은 프로세스를 종료하는 것입니다.
제발 뭔가 조치를 취하세요. 개선할 부분이 너무 많기 때문에 그렇게 어렵지는 않을 것입니다!
Re: 데이터베이스에 저장이 너무 느립니다(분당 10,000개 레코드).
BrianCorcoran wrote:
The emphasis in JMP development has been on getting data into the product. We have put considerable time into getting "block" fetching mechanisms working for Open Table, but we do not have a similar mechanism for Save Table. We have an open request to do this, but cannot commit to a specific implementation date.
Brian Corcoran
이는 사실상 '데이터베이스에 저장' 옵션이 수천 개 이상의 레코드로 구성된 테이블에는 전혀 쓸모가 없다는 것을 의미합니다. 이 값비싼 소프트웨어의 사양만 좀 더 명확했다면...
Re: 데이터베이스에 저장이 너무 느립니다(분당 10,000개 레코드).JMP 개발에서는 데이터를 제품으로 가져오는 데 중점을 두었습니다.우리는 Open Table에서 작동하는 "블록" 가져오기 메커니즘을 얻는 데 상당한 시간을 투자했지만 Save Table에 대해서는 유사한 메커니즘이 없습니다.이에 대한 공개 요청이 있지만 구체적인 구현 날짜를 확정할 수는 없습니다.
브라이언 코코란
Re: 데이터베이스에 저장이 너무 느립니다(분당 10,000개 레코드).
PMroz wrote:
You could export the JMP dataset to a csv file, and then use the SQL Server bulk insert functionality. A bit of a kluge but it should be much faster.
감사합니다. 나는 실제로 비슷한 것을 시도했습니다. 그러나 '데이터베이스에 저장'을 더 빠르게, 즉 실행 가능하게 만드는 방법이 있는지 알고 싶습니다. 지금은 너무 느려서 사용할 수 없기 때문입니다.
ODBC 설정/드라이버와 관련이 있습니까(하지만 JMP는 데이터베이스에서 데이터를 검색하는 속도가 빠릅니다), 아니면 JMP도 그런가요?
Re: 데이터베이스에 저장이 너무 느립니다(분당 10,000개 레코드).JMP 데이터 세트를 csv 파일로 내보낸 다음 SQL Server를 사용할 수 있습니다. 대량 삽입 기능.약간의 문제가 있지만 훨씬 더 빨라야 합니다.