Oracle里的数据导入到sqlite,把oracle的中数据通过批处理导入sqlite中

首先推荐一个开源跨平台的SQLite图形化管理工具SQLiteStudio:

http://sqlitestudio.pl

用SQLiteStudio建5张等价于你Oracle里的那5张数据表.然后在CLI下用PHP的oci8扩展函数SELECT读取整张表数据,然后用PDO_SQLite开启事务,批量插入数据到SQLite数据库中.

注意CLI下运行的PHP脚本也是有内存限制(memory_limit)的,php.ini中设为-1,则表示不限制内存占用:

http://php.net/manual/zh/ini.core.php#ini.memory-limit

还有,保证你的机器内存能容纳20W数据(不算多),PHP7的数组更省内存,你也可以尝试使用PHP7进行操作,PHP7已经发布预览版RC1.CLI下操作完后不用的变量和数组记得unset释放掉内存.

$table = 'CREATE TABLE logs (

id       INTEGER PRIMARY KEY,

date     VARCHAR(19) NOT NULL,

content  VARCHAR(200) NOT NULL

)';

if (!file_exists('data.db3')) {

$dbh = new PDO('sqlite:data.db3');

$dbh->query($table);

} else {

$dbh = new PDO('sqlite:data.db3');

}

$date = date('Y-m-d H:i:s');

$content = time();

$dbh->beginTransaction();

for($i=0;$i<1000000;$i++) {

$stmt = $dbh->prepare('INSERT INTO logs (date, content) VALUES (:date, :content)');

$stmt->bindParam(':date', $date, PDO::PARAM_STR, 19);

$stmt->bindParam(':content', $content,  PDO::PARAM_STR, 200);

$stmt->execute();

}

$dbh->commit();

$dbh = null;

Ubuntu(i5-3230M),开启事务时,PHP往SQLite插入100万条记录只用16秒,平均每秒插入62500条.期间会产生一个临时文件data.db3-journal,该文件主要用于SQLite事务回滚,在事务开始时产生,在事务结束时删除.当程序发生崩溃或者系统断电时该文件将留在磁盘上,以便下次程序运行时进行事务回滚.因为会在当前目录下产生临时文件data.db3-journal,所以需要保证PHP具有对该目录的写权限.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值