我买了 Kibot 的股票数据,它是巨大的。我有大约 125,000,000 行要加载(1000 只股票 * 125k 行/股票 [自 2010 年 1 月 1 日以来的 1 分钟柱形数据],CSV 文件中的每只股票,其字段为日期、时间、开盘、高、低、收盘,体积)。我对 python 完全陌生(我选择它是因为它是免费的并且受到社区的良好支持),我选择 SQLite 来存储数据是因为 python 对它的内置支持。(而且我非常了解 SQL 语言。SQLiteStudio 是一个免费程序的瑰宝。)
我的加载程序运行良好,但速度越来越慢。SQLite db 大约 6 Gb,并且只加载了一半。我使用 INSERT 语句加载大约 500k 行/小时,并在每只股票(大约 125k 行)之后提交事务。
那么问题来了:PyTables 是否比 SQLite 快得多,努力学习如何使用它值得吗?(而且由于我处于学习模式,请随意提出这两个的替代方案。)PyTables 困扰我的一件事是它真的很简单,几乎就像保存一个二进制文件一样,用于免费版本。没有“where 子句”函数或索引,因此您最终会扫描所需的行。
加载数据后,我将使用基于 NumPy 的东西进行统计分析(滚动回归和相关等):Timeseries、larry、pandas 或 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
);