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)
区别不大!
开始跑的时候我打算各插100万条记录,太慢了,而且中途我通过cmd链接到那个sqlite3数据库上,执行了select count(*) ,结果ruby插数据的这个链接断掉了,报错说当前sqlite3链接非常的busy!感觉sqlite3好脆弱啊!
我想可不可以这样用sqlite3,启动的时候把数据库全都加载到内存,所有的增删改操作直接同步的对内存中的sqlite3操作,但放到一个队列里,异步的对sqlite3物理文件操作。
或者这样行不行,把sqlite3启动时加载到memcache里面好了,再启动一个任务定时的attach到物理文件。
反正都是放到内存里,因为感觉sqlite3物理文件的读写很慢,而且并发有问题。
分享到:
- 2008-12-30 16:16
- 浏览 1283
- 评论(5)
- 论坛回复 / 浏览 (5 / 4135)
- 查看更多
相关推荐
11. **批量插入**:大量数据插入时,使用`create`或`update`方法会慢,应使用`create!`或`update!`批量操作。 12. **延迟加载和懒加载**:理解ActiveRecord的懒加载机制,避免在初始化对象时立即加载关联数据。 13...
例如,创建一个表单模型类,继承自yii\db\ActiveRecord,定义对应的属性和规则,然后通过save()方法即可完成数据的插入和更新。此外,Yii2还支持数据库查询构建器,方便进行复杂的SQL查询。 对于大型系统,数据库...
- **插入**:通过`save()`方法插入新记录,例如`new User().set("username", "test").save();` - **更新**:`update()`方法用于更新已有记录,如`new User().setId(1).set("username", "updated").update();` - *...
3. SQL基础:学习SQL语句,包括SELECT、INSERT、UPDATE和DELETE,用于查询、插入、更新和删除数据。了解JOIN操作用于关联不同表的数据,以及索引的创建和优化以提升查询速度。 4. 数据库安全性:理解如何加密数据库...
7. **数据库管理**:在ThinkPHP中,可以使用Model类直接操作数据库,或者使用Db类进行底层数据库操作,如查询、插入、更新和删除数据。 8. **企业系统功能**:结合SQL文件名(如my_qyjj.sql可能代表企业简介,my_...
1. **数据查询**:通过SQL语句进行数据的检索、插入、更新和删除。 2. **索引优化**:创建合适的索引来加速查询速度。 3. **事务处理**:保证数据的一致性和完整性,例如在并发环境中处理用户的发表和评论操作。 4. ...
缓存管理则可以提高数据读取速度,减轻数据库负载。 这个demo应该包含了一些基本的CRUD操作示例,如添加新用户、显示用户列表、编辑用户信息和删除用户。通过学习和实践这些例子,你可以了解ThinkPHP5框架的核心...
因此,了解如何创建数据库、表结构、插入、查询、更新和删除数据是必要的。 3. **Web表单与HTTP协议**:用户通过网页表单提交查询请求,这涉及到HTML表单元素的使用以及HTTP的GET或POST方法。理解这些基本的Web交互...
2. ORM(Object-Relational Mapping):thinkPHP的ActiveRecord模式使得数据库操作对象化,简化了SQL语句的编写。 3. 增删改查:通过模型对象的方法,如save()、delete()、update()等,实现对数据库的修改操作。 4...
Yii 提供了 ActiveRecord 数据持久化模式,使得数据库操作变得简单易行。通过继承 CActiveRecord 类,你可以快速创建数据模型,实现对数据库表的操作,如查询、插入、更新和删除。同时,Yii 还支持 SQL 查询构建器...
6. **数据库操作**:ThinkPHP5.1提供了ActiveRecord模式的数据库操作,可以方便地进行数据查询、插入、更新和删除等操作,支持关联查询和数据验证,保证数据的完整性和一致性。 7. **缓存管理**:框架内置了多种...
### Ruby on Rails 入门知识点详解 #### Rails简介与特性 ...Rails 的强大之处不仅在于其高效的开发速度,更在于其灵活的设计思想和丰富的生态系统。希望每位开发者都能从中获得启发,创造出更多优秀的作品。
其ActiveRecord模式让数据库操作更加简便,SQL语句的生成和执行都变得更加直观。同时,增加了事务处理和预处理语句,增强了数据安全性。 四、模板引擎改进 3.1版本的模板引擎ThinkTemplate在保持易用性的同时,...
黄永成老师会讲解如何使用Thinkphp的ActiveRecord模式进行CRUD(Create, Read, Update, Delete)操作,包括建立数据表结构,插入、查询、更新和删除许愿信息。 7. **安全性考虑**:为了防止SQL注入等安全问题,教程...
- **GORM (Grails Object-Relational Mapping)**: GORM 是Grails 提供的ORM工具,允许开发者以面向对象的方式操作数据库,支持Hibernate和ActiveRecord风格的数据访问。 - **GRAILS CLI**: Grails 提供了一个命令行...
- **数据库操作**:有了实体类后,我们就可以使用Afinal进行增删改查操作,如插入数据: ```java User user = new User(); user.setName("Test"); db.save(user); ``` 查询数据: ```java List<User> users ...
它基于ActiveRecord设计模式,允许开发者通过简单的Java对象与SQLite数据库进行交互,而无需编写SQL语句。Afinal提供了以下特性: 1. **实体类和数据库表的映射**:通过在Java类上添加@Entity注解,可以将类映射到...
2. 数据缓存:JFinal集成了Memcached和Redis等缓存服务,可以有效提升数据访问速度。 3. RESTful支持:JFinal支持RESTful风格的URL,方便构建前后端分离的Web应用。 4. AOP支持:JFinal的Interceptor机制实现了...
3. **ActiveRecord模式**:SubSonic提供了对ActiveRecord设计模式的支持,使得对象与数据库表之间的映射变得简单。开发者可以直接操作对象,而无需关心底层的数据库交互。 4. **Linq支持**:尽管2.1版本可能不包含...
通过模型可以插入新记录到数据库中。 **6.11 字段映射** 字段映射可以将模型中的字段与数据库中的字段进行一一对应。 **6.12 连贯操作** 连贯操作允许在一次调用中执行多个数据库操作。 **6.13 CURD 操作** ...