왜 CSV를 계속 사용합니까? [닫은]


14

왜 CSV를 계속 사용합니까?

필자는 최근 건강 도메인 작업으로 전환했으며 데이터 전송 표준에 대한 훌륭한 작업에도 불구하고 모든 데이터 전송은 외부 조직에보고하고 새로운 시스템을 구현할 때 데이터 마이그레이션을 위해 CSV 로 이루어졌습니다 .

불행하게도 CSV를 사용하는 것은 개발자 시간 낭비와 함께 동일한 바보 같은 오류가 끝없이 반복되는 원인입니다. (나쁜 이스케이프, null 필드 처리 실패 등)

나는 우리가 더 잘할 수 있으며 JSON과 XML (인스턴스에 따라 다름) 사이의 모든 것이 좋을 것입니다. (대부분의 시간은 한 MS SQLserver 2005에서 다른 MS SQLserver 2005로가는 데이터입니다!)

나는 이것이 일어나는 것을 볼 때마다 문자 그대로 한 개발자가 다른 시간을 낭비하는 것을보고 있습니다.

그럼 왜 우리는 서로를 계속 샤프트? 언제 멈출 까?


20
건강 도메인에 가입하고 CSV가 잘못되었다고 생각하는 경우 HL7이 나올 때까지 기다리십시오!
G__

3
@ 그레그 롤, 그를 놀라게하지 마십시오, 놀라움은 항상 최고입니다 :)
James Love

47
-1 CSV로 발생하지 않는 문제에 대한 CSV 방지 반열입니다. 라이브러리없이 XML을 읽고 쓰면 어떻게 될까요? 당신의 문제는 백 배나 더 나쁠 것입니다.
Jesse Millikan

12
"그래서 왜 우리는 서로 축을 유지합니까? 우리는 언제 멈출까요?" 나는 dunno, 우리가 일하는 곳에서 누군가가 샤프트를 사용하지 않고 CSV를 잘 사용할 수 있습니다 (실제로 훨씬 더 실망스러운 XML 단계입니다). 어쩌면 당신과 동료가 뭔가 잘못하고 있습니까?
FrustratedWithFormsDesigner

3
지금까지 모든 토론에서 CSV의 실제 문제를 놓치고 있습니다. 구분 문자가 데이터에 나타날 가능성이 높으며 CSV는 해당 문제에 대해 최적보다 덜 접근합니다 (데이터를 인용하면 문제가 다운 스트림에 빠짐) . 더 나은 방법은 파이프로 구분 된 파일을 사용하는 것입니다.
Larry Coleman

답변:


10

귀하의 경우, 하드 사양이 부족하여 CSV가 적합하지 않은 것 같습니다.

사소한 데이터의 경우 올바른 선택이 아닙니다.

왜 / 언제 CSV가 좋은 선택입니까? 아마도 언급하기에는 너무 많은 사례 일지라도 플랫 데이터에 대한 단순성의 이점은 명백합니다. 데이터가 제대로 위생 처리 / 탈출되는 한 문제가 없습니다. 일반적으로 말하면,이 모든 경우는 간단 / 사소한 것입니다. 물론 콘텐츠에 나타나는 표준 구분 기호는 CSV를 처리 할 때 종종 고통 스럽습니다.

그러나 기술적이지 않은 클라이언트가 Excel 시트 또는 기타 유사한 유스 케이스에서 데이터를 보내도록하는 것보다 더 복잡한 일을하는 경우 CSV는 심각한 용도로는 충분하지 않을 수 있습니다.

XML에 대해 자세한 표준화 된 스키마 사양을 수행 할 수 있으므로 XML은 JSON보다 훨씬 적합합니다 (예 : JSON보다 훨씬 그렇습니다). (사양 / 스키마는 여러 구현 스타일, XSD, DTD & Relax NG의 유연성을 누릴 수 있습니다)

특히 대역폭이 중요한 폐쇄 루프 시스템의 경우 JSON이 XML보다 더 적합 할 수 있지만 스키마 사양 언어가 부족하여 종종 엔터프라이즈 수준의 응용 프로그램에서이를 배제 할 수 있습니다.


3
실제로 "데이터가 제대로 위생 처리 / 이탈되는 한". 그러나 많은 프로그래머에게 방법은 (의사 코드 write('"');write(fld1);write('"');광고 구역 에서) 자신을 작성 하여이 잘못 될 수있는 것처럼 보입니다 . 그런 다음 그들은 자신의 파서를 작성합니다 ....
Gerry

3
그렇습니다. 롤업 직원은 실제로이 인터넷을 사용하기 시작해야합니다 . 어쩌면 도서관이라는 단어의 의미를 배울 수도 있습니다.
ocodo

정보 공유! 재사용 가능한 코드! 어리석은 새로운 아이디어. 다른 사람들의 실수를 반복하는 것은 나의 위대한 ^ 50 할아버지에게 충분했고, 그것은 나에게 충분합니다!
Steve314

@ Steve314-/ me "공포와 오락의 얼굴을 만듭니다."
ocodo

그러나 CSV에는 어려운 사양이 있습니다. 우리의 문제는 이제 일반적인 문제입니다. Excel은 100 %를 준수하지 않습니다.
gbjbaanb

63

CSV에 찬성하여 몇 가지 사항을 알려 드리겠습니다.

  • CSV는 구현 및 구문 분석이 간단합니다 (OP에서 제안 된 대안보다 큼).
  • CSV는 지구상의 거의 모든 소프트웨어 (과거와 현재)에 의해 이해됩니다.
  • CSV는 상당히 평평하고 간단한 스키마를 강요합니다 (단 하나의 평평한 필드 목록이 있음)
  • CSV는 XML, JSON 또는 (UGH!) HL7 (V2.x, pre-xml)보다 사람이 읽을 수 있습니다.

14
당신은 '악마 옹호자'를 할 필요가 없습니다 ... 당신이 만드는 모든 점은 완전히 유효하며 CSV가 여전히 사용되는 이유를 설명합니다. 그냥 더 간단합니다.
GrandmasterB

7
@Stephen : 몇 가지 다른 CSV 변형을 알고 있습니까?
FrustratedWithFormsDesigner

3
@FrustratedWithFormsDesigner 얼마나 많은 이스케이프 규칙을 생각할 수 있습니까?
Stephen

3
@Pierre 303 나는 바보 증거 였으면 좋겠다. 개발자 증거라면 기쁠 것입니다.
Stephen

8
@ Pierre303, 바보 증거 ... 무언가 '바보 증거'라고 생각되면 충분한 바보로 테스트하지 않은 것입니다.
ocodo

29

이전 버전과의 호환성. 외부 조직 웹 서비스가 CSV를 처리하고 기존 도구가 모두 CSV를 처리하는 경우 어느 쪽도 새로운 서비스로 이동하려는 동기가 없습니다. 왜 외부 조직이 다른 형식을 지원하기 시작합니까? 누구와도 함께 사용할 수 없습니다! 왜 다른 형식의 생산을 시작하겠습니까? 당신과 함께 일하는 단체는 그것을 받아들이지 않습니다!

여기서 볼 수 있는 실제 문제는 왜 개발자가 매번 자신의 CSV 코드를 굴리는 것입니까? 그들이 안정적이고 견고한 CSV 라이브러리를 사용했다면 설명 할 문제가 없을 것입니다. 문제는 개발자가 라이브러리를 사용하는 대신 자신의 솔루션을 굴려서 발생하며, 솔직히 JSON 또는 XML로 이동하여 마법을 해결하는 방법을 알지 못합니다. 라이브러리를 사용하는 대신 여전히 정규 표현식을 사용하려는 사람들이 있습니다.


4
매번 롤링 할 때마다 +1 결함이있는 데이터 형식이 아니라 배우지 못한 개발자를 봅니다. :-)
G__

'이전 버전과의 호환성'-당연히-그러나 앞으로 나아 가지 않으면 수천의 비용이 듭니다.
Stephen

CSV 라이브러리를 롤링 하는 것이 좋습니다 . 그냥 재사용 하십시오!
GrandmasterB

5
@Stephen : 아니요, 필요할 때마다 CSV를 다시 구현하면 비용이 수천이됩니다. 형식으로서 CSV는 괜찮습니다. 제대로 얻을 수없는 개발자가 문제입니다.
아논.

6
@Stephen : CSV의 문제점은 너무 단순하고 더 복잡한 것을 원한다는 것입니다.
아논.

15

CSV 조금이다 빠르고 , 작은 크기 , 아주 쉽게 (심지어 Excel에서) 핸들 많은 기존 응용 프로그램이 널리 사용되는, 그것을 이해 표준 .

많은 상황에서 여전히 첫 번째 선택입니다.

나는 개인적으로 여전히 그 형식을 많이 좋아합니다. 그러나 JSON도 사용하지만 웹 UI와 같은 다른 응용 프로그램에도 사용합니다.


1
나는 "비트"의 초기 사용을 제외하고 이것의 모든 비트에 동의합니다.
Orbling

3
선행 0을 유지 해야하는 데이터가 있으면 Excel에서 절대적으로 중요 할 수 있습니다 .... 내가 어떻게 알고 있는지 물어보십시오! ... Excel 이외의 인터페이스는 훌륭한 인터페이스를 제공합니다.
Dal

@Dal : 신용 조합에서 일했고 신용 카드 번호가 포함 된 CSV 파일을 처리해야했습니다. 16 자리 숫자가 있습니다. 그 엑셀은 15로 반올림되었습니다.
dan04

또는 과학적 표기법으로 변환 한 것이 더 나쁩니다. :( 처음으로 ACH 처리에서 원격 계정 번호가 유효하지 않다는 오류가 발생했습니다. 계좌 번호를 2.3456356e29 등으로 입력
cabbey

1
@Jeanne : CSV에 실제로 JSON과 같은 숫자 / 문자열 구분이있는 경우 Excel에 값의 유형을 알려주는 것이 매우 쉽습니다. 이러한 문제는 CSV가 문자열 형식으로되어 있기 때문입니다.
dan04

15

무엇보다도 CSV 데이터를 소비하는 것이 (약간) 사소한 일 이기는하지만 생성이 매우 쉽습니다.

또한 JSON이나 XML 모두 (생산자 또는 소비자 모두에게) 올바르게 얻는 것이 더 쉽다는 것을 지적했습니다. 실제로, 많은 사람들이 정규식을 사용하여 XML 데이터를 구문 분석하려고 시도 한다는 것을 알기 위해 간신히 살펴보아야 합니다.

CSV로 발생할 수있는 (및 수행 할 수있는) 대부분의 문제는 JSON과 XML에서도 발생할 수 있습니다. 특히 XML은 더 많은 잠재적 인 문제를 추가합니다. XML 데이터를 구문 분석하는 라이브러리는 일반적으로 CSV 데이터에 대한 유사한 라이브러리보다 더 크고 느리고 사용하기가 더 어렵습니다.


1
정확하게 생성하는 것처럼 보이는 것은 매우 쉽습니다. 스펙이없는 것을 소비하는 것은 사소한 데이터가있을 때 사소한 것이 아닙니다.
Stephen

2
@Stephen : 내가 한 것을 참고 하지 첫 번째 문장에서 "제대로"등이 있습니다. 그것의 생략은 의도적이었다!
Jerry Coffin

4

먼저 형식에 매우 실제적인 문제가 있음에 동의합니다.

  • 문자열 형식입니다.
    • 텍스트와 숫자 값을 구분하지 않으면 Excel에서 잘못 추측하여 우편 번호와 신용 카드 번호를 망칠 수 있습니다.
    • 이진 데이터를 나타내는 표준 방법은 없습니다.
    • 이 사이에 구별하는 표준 방법은 없습니다 NULL''SQL 데이터베이스로 CSV 파일을 가져올 때 문제이다.
  • "특수 문자"에 대한 지원이 부족합니다.
    • (XML &#xNNNN;또는 JSON \uNNNN) 과 같은 숫자 참조 가 없으면 제어 문자 또는 비 ASCII 문자를 나타내는 표준 방법이 없음을 의미합니다.
    • 많은 구현은 필드 내에서 줄 바꿈을 올바르게 구현하지 않습니다.
  • 표준이 없습니다. 있다 RFC 4180는 있지만 보편적으로 다음 아니에요.

하지만 한편으로는:

  • 대안이 더 나쁩니다. 나무를 중심으로 설계된 JSON과 XML은 특히 테이블 기반 데이터에 적합하지 않습니다.
  • 컴팩트! XML에서는 행의 열에 대해 시작 태그와 끝 태그가 있어야 합니다 . CSV에서는 열 머리글을 한 번만 씁니다.
  • CSV는 생성하기가 매우 쉽습니다.
  • 프로그래머가 아닌 사람은 Excel에서 CSV 파일을 열 수 있습니다.

반대로; 이 데이터를 Excel에서 사용하면 해킹 가능한 범죄가 될 수 있으며 CSV는 잘못 생성하기 쉽고 소형은 문제가 아니며 나무는이 데이터에 더 적합합니다.
Stephen

4

많은 분석가가 피벗 테이블 등에 Excel을 사용하기 때문에 기본 Excel 형식을 출력하는 것보다 CSV를 출력하는 것이 훨씬 쉽습니다.

각주 : Excel에서 CSV 파일을 처리하는 데있어 많은 문제 (예 : 선행 0을 제거하고 정밀도를 잃는 것)를 보았을 때, 이는 더 쉬울 것이라는 잘못된 생각 일 것입니다.


+1000입니다. Excel은 빠르고 더러운 데이터 분석을위한 킬러 응용 프로그램입니다. Excel로 내보낼 수 있으면 비즈니스, 리서치 등의 비 개발자에게 강력한 힘을 줄 수 있습니다. Excel은 전 세계를 운영합니다. CSV 내보내기는 Excel을 실행합니다.
johannes

2

CSV에 한 가지 잘못된 점이 있다면 CSV가 너무 단순 해 많은 개발자가 자신의 파서 / 작성기를 발명 한 후 나중에 이스케이프를 올바르게 처리하지 못하고 CSV를 비난하는 것입니다. 좋은 CSV 파서 (많은 좋은 파서)가 있으면 아무런 문제가 없습니다.

CSV에 대해 언급 한 일부는 사소한 데이터에는 좋지 않지만 동의하지 않습니다. XML은 다른 데이터 세트를 다른 "컨테이너"태그에 넣을 수 있으므로 중요하지 않은 데이터를 허용합니다. CSV를 사용하면 항상 다른 파일에 다른 데이터를 넣어 동일한 효과를 얻을 수 있습니다.

또한 데이터 전송에 XML을 사용하는 것은 기본적으로 XML의 목적에 위배됩니다. 데이터 전송은 일반적으로 공급자와 소비자 간의 안정적인 계약을 의미하지만 XML은 소비 될 때 해석 가능한 확장 가능한 정보를 전달해야합니다.


1

CSV는 끝에 간단한 텍스트 데이터 만 있고 쉼표와 세미콜론 / 엔드 라인 만 있으면 좋을 것 같습니다.

트리 아키텍처 데이터 또는 복합 데이터는 CSV와 함께 사용할 수 없습니다.

CSV는 Excel과 마찬가지로 평범한 2D 텍스트 배열입니다.


1

실제로 메인 프레임에 관한 것이며 여기에서 뛰어납니다.

기존 시스템은 CSV를 사용하여 통신하는 방법을 알아 냈기 때문에 메인 프레임. 따라서 데이터를 덤프하는 큰 앱은 데이터를 읽고 쓸 수 있으며 지금 변경할 이유가 없습니다.

CSV를 직접 열 수 있기 때문에 Excel. 실제로 설치시 .csv 확장명을 대신합니다. 사용자는 약간 웃기는 모양의 Excel 아이콘을 클릭하기 만하면 열리고 멋진 그리드를 만들 수 있습니다.

이제 현대 버전의 Excel은 XML을 직접 읽을 수 있습니다. 그러나 그렇게하려면 사용자는 "그 그림을 두 번 클릭"하는 것보다 조금 더 이해해야합니다. 오른쪽 그림을 두 번 클릭하면 일부 산업에서는 너무 많은 질문을 할 수 있습니다. . .


-1

나는 많은 기술적 답변을 보았지만 사람들이 CSV를 사용하는 이유는 사람들이 다른 많은 기술 / 기술을 사용하는 것과 같은 이유 라고 생각합니다.


-1

왜 사용하나요?

  1. 고객이 원한다
  2. 네트워크에서 XML보다 빠릅니다 (더 작은 네트워크로드)
  3. 데이터를 얻는 데 더 복잡한 것은 필요하지 않습니다.
  4. 크로스 플랫폼
  5. 인간이 읽을 수있는
  6. 리더와 라이터를 쉽게 구현

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.