Tedious: λŒ€λŸ‰ λ‘œλ“œ 였λ₯˜: ν˜ΈμŠ€νŠΈμ—μ„œ ν˜„μž¬ 행을 μ½λŠ” λ™μ•ˆ 쑰기에 λ©”μ‹œμ§€ 끝이 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2014λ…„ 10μ›” 27일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: tediousjs/tedious

일뢀 32kb 이미지(ν…ŒμŠ€νŠΈ μ€‘μ—λŠ” μ΄λŸ¬ν•œ 이미지 ν•˜λ‚˜λ§Œ)λ₯Ό λŒ€λŸ‰μœΌλ‘œ λ‘œλ“œν•΄μ•Ό ν•˜λŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ™μ•ˆ λ‹€μŒ 였λ₯˜ λ©”μ‹œμ§€κ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

RequestError: While reading current row from host, a premature end-of-message was
encountered--an incoming data stream was interrupted when the server expected to see
more data. The host program may have terminated. Ensure that you are using a supported
client application programming interface (API).

    at Connection.<anonymous> (H:\Projects\csi-photo-import\node_modules\mssql\lib\tedious.js:478:17)
    at Connection.emit (events.js:95:17)
    at Parser.<anonymous> (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\connection.js:434:15
)
    at Parser.emit (events.js:95:17)
    at Parser.nextToken (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\token\token-stream-par
ser.js:91:18)
    at Parser.addBuffer (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\token\token-stream-parser.js:68:17)
    at Connection.sendDataToTokenStreamParser (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\
connection.js:869:35)
    at Connection.STATE.SENT_CLIENT_REQUEST.events.data (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\connection.js:273:23)
    at Connection.dispatchEvent (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\connection.js:732:59)
    at MessageIO.<anonymous> (H:\Projects\csi-photo-import\node_modules\mssql\node_modules\tedious\lib\connection.js:660:22)

λ‚΄ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

            var req = new sql.Request(conn);
            var table = new sql.Table('#mempictures');
            table.create = true;
            table.temporary = true;
            table.columns.add('uid', sql.VarChar(50), {nullable:false});
            table.columns.add('mempicture', sql.Image, {nullable:false});
            //... then in a loop
                    table.rows.add(keys[i], memberPhotos[keys[i]].BinaryPhotoBuffer); //, memberPhotos[keys[i]].BinaryImage);   

            //... completed with
            var deferred = new q.defer();
            req.bulk(table, function(err, rowct) {
                if (err)
                    deferred.reject(err);

                deferred.resolve(statuses);
            });
            return deferred.promise;

λ‚΄κ°€ λ­”κ°€λ₯Ό λ†“μΉ˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? #197κ³Ό 관련이 μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이전에 λͺ‡ 가지 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 루프에 μ‚½μž…λœ 행이 없을 λ•Œλ„ λ°œμƒν•©λ‹ˆλ‹€. 일반적인 κ²½μš°λŠ” 열을 μΆ”κ°€ν•œ λ‹€μŒ λ‹€λ₯Έ μœ„μΉ˜μ—μ„œ 일뢀 배열을 κ°€μ Έμ˜€κ³  ν•΄λ‹Ή 배열을 λ°˜λ³΅ν•˜μ—¬ 행을 μ‚½μž…ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ•Œλ•Œλ‘œ 배열이 λΉ„μ–΄ μžˆμ„ λ•Œ 행이 μ‚½μž…λ˜μ§€ μ•Šκ³  이 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. λ”°λΌμ„œ λŒ€λŸ‰ λ‘œλ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° 전에 배열이 λΉ„μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λͺ¨λ“  6 λŒ“κΈ€

λ‚˜λŠ” bcp μœ ν‹Έλ¦¬ν‹°κ°€ nvarchar(max) (WireSharkλ₯Ό 톡해)λ₯Ό μΈμ½”λ”©ν•˜λŠ” 방법과 Tediousκ°€ μˆ˜ν–‰ν•˜λŠ” 방식을 λΉ„κ΅ν•˜μ—¬ #197을 ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€. 이것은 μ•„λ§ˆλ„ 이 문제λ₯Ό λΆ„μ„ν•˜λŠ” κ°€μž₯ μ‰¬μš΄ 방법이기도 ν•©λ‹ˆλ‹€.

TDS 사양을 μ‚΄νŽ΄λ³΄λ©΄ image, text 및 ntextκ°€ λ‹€λ₯΄κ²Œ μž‘λ™ν•˜κ±°λ‚˜ 헀더에 λ‹€λ₯Έ 토큰이 ν¬ν•¨λ˜λ„λ‘ ν•˜λŠ” μΌνšŒμ„± λ©”λͺ¨κ°€ 많이 μžˆμŠ΅λ‹ˆλ‹€. Tediousκ°€ μ²˜λ¦¬ν•˜μ§€ μ•ŠλŠ” 극단적인 κ²½μš°κ°€ μžˆλ‹€λŠ” 것은 μ „ν˜€ λ†€λΌμš΄ 일이 μ•„λ‹™λ‹ˆλ‹€. 이미지 μœ ν˜•μ΄ 6λ…„ 이상 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ©° κ°€κΉŒμš΄ μž₯λž˜μ— SQL Serverμ—μ„œ 제거될 κ°€λŠ₯성이 μžˆλ‹€λŠ” 것을 이미 μ•Œκ³  있기λ₯Ό λ°”λžλ‹ˆλ‹€(λŒ€μ‹  varbinaryλ₯Ό μ‚¬μš©ν•΄μ•Ό 함).

μ†”μ§νžˆ λ§ν•΄μ„œ μ—¬κΈ° μžˆλŠ” λͺ¨λ“  μ‚¬λžŒλ“€μ€ μ—¬κ°€ μ‹œκ°„μ— 이 λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μž‘μ—…ν•˜κ³  μ‚¬μš©λ˜μ§€ μ•ŠλŠ” μœ ν˜•μ˜ 문제λ₯Ό μΆ”μ ν•˜λŠ” 것은 μ œν•œλœ μ—¬κ°€ μ‹œκ°„μ„ 그닀지 보람 있게 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. @patriksimek 이 관심을 κ°€μ§ˆ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” μœ ν˜•μ— λ¬Έμ œκ°€ μžˆλŠ” 경우(예 nvarchar(max) μ—μ„œ λ°œμƒν•œ 경우), μ΄λŠ” λ‹€λ₯Έ μ΄μ•ΌκΈ°μž…λ‹ˆλ‹€. λ˜ν•œ bcp와 Tediousκ°€ λ‹€λ₯΄κ²Œ μˆ˜ν–‰ν•˜λŠ” μž‘μ—…μ„ νŒŒμ•…ν•˜κΈ° μœ„ν•΄ 초기 레그 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ©΄ 더 λ§Žμ€ 지원을 μ œκ³΅ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

흠. 이미지 μœ ν˜•μ΄ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 사싀을 λͺ°λžμ§€λ§Œ 놀라지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 우리 그룹은 그것을 μ‚¬μš©ν•˜λŠ” 캠퍼슀의 λ‹€λ₯Έ κ³³μ—μ„œ 제3자 DBλ₯Ό μƒμ†λ°›μ•˜μŠ΅λ‹ˆλ‹€.

μ–΄μ¨Œλ“  μž„μ‹œ ν…Œμ΄λΈ”μ— λŒ€λŸ‰ λ‘œλ“œν•œ λ‹€μŒ κ±°κΈ°μ—μ„œ 쑰인/μ—…λ°μ΄νŠΈλ₯Ό μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μž„μ‹œ ν…Œμ΄λΈ”μ—μ„œ VarBinaryλ₯Ό μ‚¬μš©ν•˜κ³  ν•΄κ²° λ°©λ²•μœΌλ‘œ λ³€ν™˜μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

이 ν”„λ‘œμ νŠΈμ— λŒ€ν•œ λͺ¨λ“  노고에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

μ’‹μ•„μš”. varbinary에 λ¬Έμ œκ°€ μžˆλŠ” 경우 ν™•μ‹€νžˆ κ²Œμ‹œν•˜κ³  κ²€ν† ν•˜κ² μŠ΅λ‹ˆλ‹€.

νŒŒν—€μΉ  κ°€μΉ˜κ°€ μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 문제λ₯Ό μž¬ν˜„ν•  수 μžˆμ—ˆμ§€λ§Œ μ™œ 이런 일이 λ°œμƒν•˜λŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. λ¬Έμ„œμ— λ©”λͺ¨κ°€ μžˆμŠ΅λ‹ˆλ‹€.

XMLTYPE은 BulkLoadBCP용으둜만 μœ νš¨ν•œ LONGLEN_TYPEμž…λ‹ˆλ‹€.

이미지도 LONGLEN_TYPEμ΄λ―€λ‘œ λŒ€λŸ‰ μ‚½μž…μ—μ„œ IMAGEλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ“€λ¦½λ‹ˆλ‹€. 더 μ΄μƒν•œ 것은 λ¬Έμ„œμ˜ 또 λ‹€λ₯Έ λ©”λͺ¨μž…λ‹ˆλ‹€.

INSERT BULK μž‘μ—…μ˜ 경우 XMLTYPE은 NVARCHAR(N) λ˜λŠ” NVARCHAR(MAX) 데이터 μœ ν˜•μœΌλ‘œ μ „μ†‘λ©λ‹ˆλ‹€. XMLTYPE이 μ§€μ •λ˜λ©΄ 였λ₯˜κ°€ μƒμ„±λ©λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ λŒ€λŸ‰ μ‚½μž…μ—μ„œ XMLTYPE이 μœ νš¨ν•œκ°€μš”? λ‚˜μ—κ²Œ λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ ...

TDS λ¬Έμ„œκ°€ μ–Όλ§ˆλ‚˜ λ”μ°ν•œμ§€ λ³΄μ—¬μ£ΌλŠ” 또 λ‹€λ₯Έ μ˜ˆμž…λ‹ˆλ‹€. 첫 번째 생각은 당신이 ν•œ 것과 같은 것을 ν™•μΈν•˜κ³  이미지가 μœ νš¨ν•œ λŒ€λŸ‰ μ‚½μž… μœ ν˜•μΈμ§€ 여뢀와 ν‰μ†Œμ™€ λ‹€λ₯΄κ²Œ μΈμ½”λ”©ν•΄μ•Όν•˜λŠ”μ§€ μ—¬λΆ€λ₯Ό μ•Œλ €μ£ΌλŠ” λ©”λͺ¨κ°€ μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 μ—ˆμ§€λ§Œ 결둠을 내리지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. νŒŒν—€μΉ  κ°€μΉ˜κ°€ μ—†λ‹€λŠ” 데 λ™μ˜ν•©λ‹ˆλ‹€.

이전에 λͺ‡ 가지 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 루프에 μ‚½μž…λœ 행이 없을 λ•Œλ„ λ°œμƒν•©λ‹ˆλ‹€. 일반적인 κ²½μš°λŠ” 열을 μΆ”κ°€ν•œ λ‹€μŒ λ‹€λ₯Έ μœ„μΉ˜μ—μ„œ 일뢀 배열을 κ°€μ Έμ˜€κ³  ν•΄λ‹Ή 배열을 λ°˜λ³΅ν•˜μ—¬ 행을 μ‚½μž…ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ•Œλ•Œλ‘œ 배열이 λΉ„μ–΄ μžˆμ„ λ•Œ 행이 μ‚½μž…λ˜μ§€ μ•Šκ³  이 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. λ”°λΌμ„œ λŒ€λŸ‰ λ‘œλ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° 전에 배열이 λΉ„μ–΄ μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰