HDF5 - concurrency, compression & I/O performance
我有关于HDF5性能和并发性的以下问题:
参考文献:
- http://www.sqlite.org/faq.html#q5
- 可以在NFS文件系统上锁定sqlite文件吗?
- http://pandas.pydata.org/
更新为使用pandas 0.13.1
1)编号http://pandas.pydata.org/pandas-docs/dev/io.html#notes-caveats。有多种方法可以做到这一点,例如:让你的不同线程/进程写出计算结果,然后将一个进程组合??起来。
2)根据您存储的数据类型,操作方式以及检索方式,HDF5可以提供更好的性能。作为单个数组存储在
1 2 3 4 5 6 7 8 9 10 11 | 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 |
读
1 2 3 4 5 6 7 8 9 10 11 | 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 |
这是代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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。
看看
也就是说,我不清楚如何比较hdf和sqlite。
如果你真的想要一个高度并发的关系数据库,为什么不只使用一个真正的SQL服务器呢?