source

CSV를 디스크에 저장하지 않고 CSV 형식의 데이터를 메모리에서 데이터베이스로 전송하려면 어떻게 해야 합니까?

itover 2022. 11. 12. 08:48
반응형

CSV를 디스크에 저장하지 않고 CSV 형식의 데이터를 메모리에서 데이터베이스로 전송하려면 어떻게 해야 합니까?

저는 Quandl로부터 데이터를 수집하여 데이터베이스에 저장하는 시스템을 조립하고 있습니다.제가 하고 있는 일에는 상업적인 측면이 없습니다(고객/고용주는 없습니다).나는 이것을 취미로 하고 있고 희망적으로 한두 가지를 배우고 싶다.

어쨌든 제가 직접 설정한 과제는 zip이나 csv 파일을 디스크에 저장하지 않고 Quandl에서 데이터를 자동으로 다운로드하여 데이터베이스에 저장하는 시스템을 구축하는 것입니다.

Quandl은 매일 zip 파일로 다운로드 가능한 '델타' 파일을 제공합니다.zip 파일이 csv 파일로 압축 해제됩니다.의 MemoryStream, ZipArchive 및 StreamReader를 사용하여 zip 파일을 다운로드하고 메모리에 있는 CSV 파일을 모두 추출할 수 있었습니다.Net(구체적으로 F# - 필요한 경우 코드 스니펫을 제공합니다).

지금 제가 안고 있는 과제는 어떻게 이 정보를 제 데이터베이스로 가져올 것인가 하는 것입니다.사용하고 있는 데이터베이스는 MariaDB(MySQL과 기본적으로 동일)입니다.NAS가 지원하는 유일한 데이터베이스 유형이기 때문에 사용하고 있습니다.

옵션은 다음과 같습니다.

  1. 디스크에 저장하지 않겠다는 목표를 포기하고 csv를 디스크에 저장한 다음 이 답변과 같이 저장 프로시저에 파일 경로를 전달합니다.
  2. CSV 데이터를 JSON 또는 XML로 변환하여 스토어드 프로시저에 전달하고 서버에서 문자열을 임시 테이블로 해석할 수 있습니다.SQL Server를 사용하기 전에 이 작업을 수행한 적이 있으며, 여기서 이와 유사한 작업을 수행할 수 있을 것으로 예상됩니다.
  3. CSV를 한 줄씩 읽고 데이터베이스에 한 줄씩 전달합니다.이것은 매우 느리기 때문에 정말 선택사항이 아닙니다.

내가 알기로는 2개가 최선의 선택인 것 같아.CSV를 JSON 또는 XML로 변환하지 않는 보다 직접적인 방법이 있습니까?

LOAD DATA INFILE가장 빨리 갈 수 있는 길이 될 것입니다.그러나 CSV 데이터를 파일 시스템에 저장해야 합니다.셋업 중에 RAM 파일시스템이 임시로 포함되어 있을 수 있습니다.

dotnet 세계에는 스트림에서 CSV 데이터를 읽기 위한 강력한 모듈이 있습니다.파일은 스트림의 특수한 경우입니다.이 모듈은 역사적 이유로 ""라고 불립니다.(Visual Basic 이외에서는 정상적으로 동작합니다.오래 전의 이름이 붙어 있을 뿐입니다.)

이 방법을 사용하면 각 트랜잭션에 여러 행의 CSV를 삽입하여 성능을 향상시킬 수 있습니다.그것을 하는 데는 두 가지 방법이 있습니다.

하나는 여러 줄의 삽입물입니다.

     INSERT INTO tbl 
     (col,col,col)
     VALUES 
     (val, val, val),
     (val, val, val),
     (val, val, val),
     ...
     (val, val, val);

다른 하나는 를 사용하여 몇 백 개의 삽입을 한 후 다음 작업을 수행하는 것입니다.COMMIT이 작업을 완료할 때까지 반복합니다.경험이 가르쳐 준다면 삽입이 상당히 빨라질 것입니다.

MySQL 저장 프로시저에서 JSON을 구문 분석하시겠습니까?터무니없이 디버깅하기 어렵다.그리고, 제가 말씀드린 대로 거래를 관리하셔야 합니다.

언급URL : https://stackoverflow.com/questions/45719328/how-can-i-send-data-in-csv-format-from-memory-to-a-database-without-saving-the-c

반응형