小编jdm*_*ino的帖子

PyTables与SQLite3的插入速度

我买了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)

python sqlite pytables

12
推荐指数
2
解决办法
5340
查看次数

在sqlite3列中存储python datetime.time的最佳方法?

我试图用python + sqlite3替换我对SAS的使用; 我正在尝试将数据从SAS数据集移动到SQLite数据库.我有很多时间字段在python中正确表示为datetime.time对象.由于SQLite是"轻微键入",我正在寻找有关用于在列中存储时间的格式的建议.(我知道我必须编写python适配器等来读取和写入列中的对象.)这些是我需要考虑的功能:

  • SQLite能够处理查询中的列.(例如,我可以选择两次之间出现的行吗?)
  • 场地的大小.(我的表通常是数亿行.)
  • 人类可读性.(我正在考虑将时间存储为整数:自午夜以来的微秒.但这会使数据更难以观察.)

有没有人解决这个问题令他们满意?

python sqlite datetime

7
推荐指数
2
解决办法
4650
查看次数

标签 统计

python ×2

sqlite ×2

datetime ×1

pytables ×1