HDF5-동시성, 압축 및 I / O 성능
HDF5 성능 및 동시성에 대해 다음과 같은 질문이 있습니다.
- HDF5는 동시 쓰기 액세스를 지원합니까?
- 동시성 고려 사항은 제쳐두고 I / O 성능 측면에서 HDF5 성능은 어떻습니까 ( 압축률 이 성능에 영향 을 미칩니 까)?
- Python과 함께 HDF5를 사용하기 때문에 Sqlite와 비교하면 성능이 어떻습니까?
참조 :
Pandas 0.13.1을 사용하도록 업데이트되었습니다.
1) 아니요 . http://pandas.pydata.org/pandas-docs/dev/io.html#notes-caveats . 이를 수행 하는 다양한 방법 이 있습니다. 예를 들어 서로 다른 스레드 / 프로세스가 계산 결과를 작성하고 단일 프로세스를 결합하도록합니다.
2) 저장하는 데이터 유형, 저장 방법 및 검색 방법에 따라 HDF5는 훨씬 더 나은 성능을 제공 할 수 있습니다. 에 저장 HDFStore
저장한다 (쿼리 할 수있는 형식으로 저장되지 말해서) 압축 한 배열 플로트 데이터로 / 놀라운 고속 읽기. 테이블 형식으로 저장해도 (쓰기 성능이 느려짐) 쓰기 성능이 매우 좋습니다. 자세한 비교를 위해 이것을 볼 수 있습니다 (이것은 HDFStore
후드 아래에서 사용되는 것입니다). http://www.pytables.org/ , 여기 멋진 사진이 있습니다.
(그리고 PyTables 2.3 이후 쿼리가 색인화되었습니다) 따라서 perf는 실제로 이것보다 훨씬 낫습니다. 따라서 질문에 답하려면 어떤 종류의 성능을 원하면 HDF5를 사용하는 것이 좋습니다.
쓰기:
In [14]: %timeit test_sql_write(df)
1 loops, best of 3: 6.24 s per loop
In [15]: %timeit test_hdf_fixed_write(df)
1 loops, best of 3: 237 ms per loop
In [16]: %timeit test_hdf_table_write(df)
1 loops, best of 3: 901 ms per loop
In [17]: %timeit test_csv_write(df)
1 loops, best of 3: 3.44 s per loop
독서
In [18]: %timeit test_sql_read()
1 loops, best of 3: 766 ms per loop
In [19]: %timeit test_hdf_fixed_read()
10 loops, best of 3: 19.1 ms per loop
In [20]: %timeit test_hdf_table_read()
10 loops, best of 3: 39 ms per loop
In [22]: %timeit test_csv_read()
1 loops, best of 3: 620 ms per loop
그리고 여기에 코드가 있습니다
import sqlite3
import os
from pandas.io import sql
In [3]: df = DataFrame(randn(1000000,2),columns=list('AB'))
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000000 entries, 0 to 999999
Data columns (total 2 columns):
A 1000000 non-null values
B 1000000 non-null values
dtypes: float64(2)
def test_sql_write(df):
if os.path.exists('test.sql'):
os.remove('test.sql')
sql_db = sqlite3.connect('test.sql')
sql.write_frame(df, name='test_table', con=sql_db)
sql_db.close()
def test_sql_read():
sql_db = sqlite3.connect('test.sql')
sql.read_frame("select * from test_table", sql_db)
sql_db.close()
def test_hdf_fixed_write(df):
df.to_hdf('test_fixed.hdf','test',mode='w')
def test_csv_read():
pd.read_csv('test.csv',index_col=0)
def test_csv_write(df):
df.to_csv('test.csv',mode='w')
def test_hdf_fixed_read():
pd.read_hdf('test_fixed.hdf','test')
def test_hdf_table_write(df):
df.to_hdf('test_table.hdf','test',format='table',mode='w')
def test_hdf_table_read():
pd.read_hdf('test_table.hdf','test')
물론 YMMV.
Look into pytables
, they might have already done a lot of this legwork for you.
That said, I am not fully clear on how to compare hdf and sqlite. hdf
is a general purpose hierarchical data file format + libraries and sqlite
is a relational database.
hdf
does support parallel I/O at the c
level, but I am not sure how much of that h5py
wraps or if it will play nice with NFS.
If you really want a highly concurrent relational database, why not just use a real SQL server?
참고URL : https://stackoverflow.com/questions/16628329/hdf5-concurrency-compression-i-o-performance
'IT박스' 카테고리의 다른 글
내 프로젝트의 프로젝트 설명 파일 (.project)이 없습니다. (0) | 2020.11.21 |
---|---|
특정 데이터베이스에 대해 마지막으로 실행 된 쿼리 (0) | 2020.11.21 |
서비스 워커의 스토리지 한도는 얼마인가요? (0) | 2020.11.21 |
github에서 13 일 전에 UserB와 커밋 된 UserA는 무엇을 의미합니까? (0) | 2020.11.21 |
어떤 cygwin 미러 사이트가 완성 되었습니까? (0) | 2020.11.21 |