ActiveRecord插入数据速度比较

ORM:ActiveRecord
Database:Sqlite3
一共两种方式,
方式一:通过ORM对象new,然后赋值,最后保存。
方式二:通过ActiveRecord::Base.connection.execute(sql)直接执行,

人家说方式二效率高,所以我想知道真的高假的高,高又能高多少,顺便看看Sqlite3的速度。

主要测试代码如下:

sql7=proc {<<SQL
insert into udb_user(user_id,user_name,creator)
values("#{(rand*10**20).round}","user#{(rand*10**20).round}",'CuiZheng1')
SQL
}

InsertBySQL=proc do |x|
proc do
x.times{ActiveRecord::Base.connection.execute(sql7.call.gsub("\n"," "))}
end
end

InsertByAR=proc do |x|
proc do
x.times do
_tempUU=UdbUser.new
_tempUU.USER_ID=(rand*10**20).round.to_s
_tempUU.USER_NAME="user#{(rand*10**20).round}"
_tempUU.CREATOR='CuiZheng2'
_tempUU.save!
end
end
end

Benchmark.bm(20) do |x|
x.report("InsertByAR",&(InsertByAR.call(10**3)))
x.report("InsertBySQL",&(InsertBySQL.call(10**3)))
end


结果如下:

-----------------------------------------------------------------

Insert Records

-----------------------------------------------------------------

user system total real

InsertByAR 2.703000 6.891000 9.594000 ( 91.735000)

InsertBySQL 0.578000 6.047000 6.625000 ( 94.265000)


区别不大!

[size=large]开始跑的时候我打算各插100万条记录,太慢了,而且中途我通过cmd链接到那个sqlite3数据库上,执行了select count(*) ,结果ruby插数据的这个[color=darkred]链接断掉[/color]了,报错说当前sqlite3链接非常的busy!感觉sqlite3好脆弱啊!

我想可不可以这样用sqlite3,启动的时候把数据库全都加载到内存,所有的增删改操作直接同步的对内存中的sqlite3操作,但放到一个队列里,异步的对sqlite3物理文件操作。
或者这样行不行,把sqlite3启动时加载到memcache里面好了,再启动一个任务定时的attach到物理文件。

反正都是放到内存里,因为感觉sqlite3物理文件的读写很慢,而且并发有问题。[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值