2011-04-19 1 views
6

데이터 저장소에 .csv 파일을 많이 사용하는 프로젝트에 착수했습니다. 특히 .csv를 사용하여 관계형 데이터를 저장하는 데 많은 문제가 있습니다. .csv 구문 분석은 일반적으로 pain이며 특히 ad-hoc 열 할당을 사용할 때 특히 그렇습니다.파일을 .csv 형식으로 저장하기위한 "주류"가벼운 대안에는 무엇이 있습니까?

저는 XML과 최소 데이터베이스 (예 : SQLite)의 사용을 권장했지만 "더 빠르고, 저렴하며, 저렴한"대안을 찾고 있습니다.

.csv 파일의 다른 "주류"가벼운 대안에는 무엇이 있습니까?

CouchDB도 마찬가지입니다. 가벼운면에서 SQLite와 어떻게 비교 될까요?

편집 : 나는 그것을 놓쳤다. 이 질문은 before에게 묻습니다.

답변

3

나는 이 CSV 파일을 직접 대신 할 수 없다고 주장합니다. CSV는 플랫 파일 인덱스 지향 형식입니다. 쉼표를 파이프 또는 기타 등으로 대체해도 상관 없습니다. 약간 다른 규칙이있는 것도 마찬가지입니다.

데이터 컨트롤이 일 때 데이터가 인 경우 SQLite를 선택하는 경우가 많습니다.

SQLite를 사용하면 동일한 툴링을 지속적으로 사용하고 임시 저장소 또는 관계형 모델로 사용할 수 있으며 "독립 실행 형"RDBMS에 대한 '단계별'계획을 수립하고 DQL을 "무료"로 제공합니다 (공간이 중요한 문제이거나 데이터 액세스를 지원하지 않는 한, 왜 그렇게하지 않는가? (현대 Firefox는 또한 SQLite를 사용합니다).

(거기에는 DB4O와 같은 객체 데이터베이스가 많이 있습니다. 또는 더 간단한 키/값 계층 적 저장소 등도 있습니다. SQLite는 마이크로 /)

XML은 특별한 도구 (sqlite/adapter)가 필요하다는 단점이 있습니다. XML은 인간 친화적 인 형식은 아니지만 메모장에서 잘 편집 할 수 있습니다. 또한 마크 업/데이터 자체 옆에 XML에 별도의 오버 헤드 (조각화 또는 구조)가 없으며 XML은 일반적으로 압축하기 쉽습니다. 또한 전체 개체 그래프를 XML로 매핑하여 관계를 유지하는 라이브러리가 많기 때문에 좋은 기능이 될 수 있습니다.

JSON과 같은 다른 형식도 있습니다.하지만 형식이 불투명 한 경우 실제로는 XML보다 차별화되지 않습니다 (툴링 지원의 문제입니다).

그래서 ... "다릅니다".

0

XML은 주류이자 상대적으로 가벼운 "경량"으로 설계되었습니다. JSON은 또 다른 인기있는 선택이지만 데이터 저장과 반대되는 객체 모델링에 훨씬 더 적합합니다.

관계형 쿼리 기능이 필요한 경우 MySQL을 사용하는 것이 좋습니다.

+4

는 그 XML을 주장 할 것이다 많은 사람들이 매우 무거운 생각합니다. JSON은 XML의 중요성 때문에 설계되었습니다 ... –

0

모두 사용 사례입니다.

나의 엄지 손가락 규칙 : 두 데이터 사이에 의존성이나 관계가있는 경우 SQLite를 사용하십시오. 단순한 데이터 파일이라면 CSV (또는 다른 "플랫"형식)를 사용하십시오. 작동하는 가장 단순한 것은 종종 가장 신뢰할만한 솔루션이기도합니다.

(참고 : CSV가 올바른 형식인지 확인하십시오.아무도 나쁜 CSV 구현을 해킹해야하는 것을 좋아하지 않습니다.

1

YAML은 XML과 같은 형식에 비해 상대적으로 작지만 JSON (이는 수퍼 집합 임)보다 약간 설명력이 있습니다. 그것은 내가 고려할 다른 후보자이다.

1

HDF5는 동시 쓰기가 필요하지 않은 경우 큰 테이블 형식의 데이터 집합을 저장하는 데 적합합니다.

파이썬에서 Pandas + PyTables은 매우 사용하기 쉽습니다. 팬더 documentation에서 예 :

In [259]: store = HDFStore('store.h5') 

In [260]: print(store) 
<class 'pandas.io.pytables.HDFStore'> 
File path: store.h5 
Empty 
Objects can be written to the file just like adding key-value pairs to a dict: 

In [261]: np.random.seed(1234) 

In [262]: index = date_range('1/1/2000', periods=8) 

In [263]: s = Series(randn(5), index=['a', 'b', 'c', 'd', 'e']) 

In [264]: df = DataFrame(randn(8, 3), index=index, 
    .....:    columns=['A', 'B', 'C']) 
    .....: 

In [265]: wp = Panel(randn(2, 5, 4), items=['Item1', 'Item2'], 
    .....:   major_axis=date_range('1/1/2000', periods=5), 
    .....:   minor_axis=['A', 'B', 'C', 'D']) 
    .....: 

# store.put('s', s) is an equivalent method 
In [266]: store['s'] = s 

In [267]: store['df'] = df 

In [268]: store['wp'] = wp 

# the type of stored data 
In [269]: store.root.wp._v_attrs.pandas_type 
Out[269]: 'wide' 

In [270]: store 
Out[270]: 
<class 'pandas.io.pytables.HDFStore'> 
File path: store.h5 
/df   frame  (shape->[8,3]) 
/s    series  (shape->[5])  
/wp   wide   (shape->[2,5,4])