jdm*_*ino 12 python sqlite pytables
我买了Kibot的股票数据,这是巨大的.我有大约125,000,000行要加载(1000股*125k行/股票[自2010-01-01以来的1分钟条形数据],每个股票在CSV文件中,其字段为日期,时间,开盘价,最高价,最低价,收盘价,体积).我对python完全不熟悉(我之所以选择它是因为它是免费的并得到了社区的支持)而且我选择了SQLite来存储数据,因为python内置了对它的支持.(而且我非常了解SQL语言.SQLiteStudio是一个免费程序的宝石.)
我的加载程序运行良好,但速度越来越慢.SQLite数据库大约是6 Gb,它只有一半加载.我使用INSERT语句加载大约500k行/小时,并在每个库存(大约125k行)之后提交事务.
所以这就是问题:PyTables是否比SQLite快得多,努力学习如何使用它值得吗?(而且因为我处于学习模式,所以可以自由地提出这两个方案的替代方案.)让我烦恼的一件事就是PyTables,它实际上是免费版本,几乎就像保存二进制文件一样.没有"where子句"功能或索引,因此您最终扫描所需的行.
在我加载数据后,我将使用基于NumPy的东西进行统计分析(滚动回归和相关等):时间序列,拉里,熊猫或scikit.我还没有选择分析包,所以如果您有推荐,并且该建议最好与PyTables或pandas(或其他)一起使用,请将其纳入您的回复中.
(对于@John)Python 2.6;
Windows XP SP3 32位;
用作INSERT语句的制造字符串;
2G物理内存的内存使用率为750M;
CPU使用率为10%+/ - 5%;
完全i/o绑定(磁盘始终处于运算状态).
数据库架构:
create table MinuteBarPrices (
SopDate smalldatetime not null,
Ticker char( 5 ) not null,
Open real,
High real,
Low real,
Close real not null,
Volume int,
primary key ( SopDate, Ticker )
);
create unique index MinuteBarPrices_IE1 on MinuteBarPrices (
Ticker,
SopDate
);
Run Code Online (Sandbox Code Playgroud)
dir*_*jot 10
早在2003年,一个科学论文上PyTables和SQLite的比较被写了F.奥特,PyTables的作者.这表明PyTables通常更快,但并不总是如此.
在你的观点上,PyTables感觉"裸骨",我会说H5py是在python中访问HDF5的简单方式,PyTables带来了各种额外的东西,比如查询和索引,HDF5原本没有.
查询示例:
example_table = h5file.root.spamfolder.hamtable
somendarray = hamtable.readWhere('(gender = "male") & (age>40)')
Run Code Online (Sandbox Code Playgroud)
需要注意的是PyTables PRO,它具有更丰富的选择,刚刚不复存在,Pro版将是免费的从现在开始.这意味着还有额外的选择.