2013-05-18 7 views
45

मैं HDF5 प्रदर्शन और संगामिति के बारे में निम्नलिखित प्रश्न:HDF5 - संगामिति, संपीड़न और मैं/हे प्रदर्शन

  1. करता HDF5 समर्थन समवर्ती लेखन पहुँच?
  2. I/O प्रदर्शन (संपीड़न दर प्रदर्शन को प्रभावित करता है) के संदर्भ में एचडीएफ 5 प्रदर्शन कैसे है?
  3. चूंकि मैं पाइथन के साथ एचडीएफ 5 का उपयोग करता हूं, इसका प्रदर्शन स्क्लाइट से कैसे तुलना करता है?

संदर्भ:

+0

मुझे लगता है कि यह प्रश्न शायद विषय के बजाय रचनात्मक नहीं है, लेकिन मैं इस बारे में नहीं सोच सकता कि इसे विषय पर कैसे किया जाना चाहिए (मैंने कोशिश की और छोड़ दिया)। Tweaked अगर खुशी से फिर से खोलने और ऊपर उठाने के लिए वोट देंगे। –

+13

एचडीएफ 5 के प्रदर्शन की तलाश करते हुए बस यह सवाल मिला। मुझे लगता है कि सवाल उपयोगी है। मैंने इसे दोहराया और फिर से खोलने के लिए मतदान किया। – Datageek

उत्तर

63

पांडा 0.13.1

1) नं http://pandas.pydata.org/pandas-docs/dev/io.html#notes-caveats उपयोग करने के लिए अपडेट किया गया। करने के कई तरीके हैं, उदाहरण के लिए अपने अलग धागे/प्रक्रियाओं को गणना परिणाम लिखते हैं, फिर एक प्रक्रिया को गठबंधन करें।

2) आपके द्वारा संग्रहीत डेटा के प्रकार के आधार पर, आप इसे कैसे करते हैं, और आप कैसे पुनर्प्राप्त करना चाहते हैं, एचडीएफ 5 काफी बेहतर प्रदर्शन प्रदान कर सकता है। एक HDFStore में एक सरणी के रूप में भंडारण, फ्लोट डेटा, संपीड़ित (दूसरे शब्दों में, इसे प्रारूप में संग्रहीत करने वाले प्रारूप में संग्रहीत नहीं किया जाता है), अद्भुत तेज़/संग्रहीत किया जाएगा। यहां तक ​​कि तालिका प्रारूप में संग्रहित करना (जो लेखन प्रदर्शन को धीमा करता है), काफी अच्छा लेखन प्रदर्शन प्रदान करेगा। आप कुछ विस्तृत तुलनाओं के लिए इसे देख सकते हैं (जो HDFStore हुड के तहत उपयोग करता है)।

(और PyTables 2.3 प्रश्नों अब इंडेक्स किए गए के बाद से), तो पर्फ़ वास्तव में आप प्रदर्शन के किसी भी प्रकार चाहते हैं तो, आपके सवाल का जवाब देना ज्यादा इस तुलना में बेहतर है, HDF5 है: http://www.pytables.org/, यहाँ एक अच्छी तस्वीर है जाने के लिए रास्ता।

लेखन:

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 के

है।

+0

बहुत दिलचस्प जेफ! (मुझे आश्चर्य है कि क्या इस प्रश्न को विषय पर ट्विक किया जा सकता है ...) –

+0

आप कौन सी आरडीबीएमएस उपयोग कर रहे हैं? साजिश PostgreSQL इंगित करता है, लेकिन कोड sqlite3 कहते हैं। –

+0

समय स्थानीय 'स्क्लाइट' फ़ाइल-आधारित (पायथन में संलग्न) से थे। साजिश मूल रूप से 'पायटेबल्स' लोगों द्वारा की गई थी और मुझे लगता है कि 'postgresql'' (जो एक वास्तविक अध्ययन था, बहुत विस्तृत था)। – Jeff

2

देखो, वे पहले से ही आप के लिए यह शेष काम का एक बहुत कुछ किया है हो सकता है।

उसने कहा, मैं एचडीएफ और स्क्लाइट की तुलना करने के तरीके पर पूरी तरह से स्पष्ट नहीं हूं। hdf एक सामान्य उद्देश्य पदानुक्रमित डेटा फ़ाइल प्रारूप + पुस्तकालय और sqlite एक संबंधपरक डेटाबेस है।

hdfc स्तर पर समर्थन समानांतर आई/ओ करता है, लेकिन मुझे यकीन है कि कैसे है कि h5py wraps के ज्यादा या अगर यह एनएफएस के साथ अच्छा खेलेंगे नहीं हूँ।

यदि आप वास्तव में एक अत्यधिक समवर्ती संबंध डेटाबेस चाहते हैं, तो क्यों न केवल वास्तविक SQL सर्वर का उपयोग करें?

संबंधित मुद्दे