锁定老帖子 主题:DM & Merb 快速体验
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-05
http://datamapper.org Why DataMapper? http://datamapper.org/why.html 一:通过irb快速体验DM 安装 gem sources -a http://gems.datamapper.org sudo gem install data_objects do_mysql dm-core dm-more 打开irb开始试用DM require 'rubygems' gem 'dm-core' require 'data_mapper' #我们把日志打到控制台里,方面看 DataMapper::Logger.new(STDOUT, 0) #连接MYSQL DataMapper.setup(:default,'mysql://root:password@localhost:3306/test_dev') #新建model:post class Post #DM 0.9 改变了之前继承DM的类方式,通过mixin DataMapper::Resource 来实现类似于AR:Base中的操作 include DataMapper::Resource #最新的版本中需要指定主键 #serial=>true 表示该建为自动增长 property :id, Integer,:serial=>true #新建其他的几个字段测试下 #更多内容查看这个:http://datamapper.org/docs/properties.html property :title,String property :body,Text property :created_at,DateTime end #建表,auto_migrate! 会先drop现有的表,然后再重新创建 Post.auto_migrate! Post.create :title=>'Post title',:body=>'Body goes here' #这些和AR没有太巨大的差距了 不过她的查询很有趣 exhibitions = Exibition.all(:run_time.gt => 2, :run_time.lt => 5) # => SQL conditions: 'run_time > 1 AND run_time < 5' 更多可以查看这里: http://datamapper.org/docs/find.html 二:快速体验Merb http://merbivore.com/ 安装: sudo gem install merb merb-more merb-plugins 快速体验 新建一个空项目 merb-gen app demo cd demo 通过merb-gen generators可以当当前查看所有的generator,自带的有 引用 Installed Generators Rubygems: controller, migration, model, part_controller, resource, resource_controller 看到后台生成的目录结构和rails有很大的相似,继续,修改config/init.rb #新增如下的依赖包,0.9 默认是不包含Helper的这些方法,手工加入,下面我们会用到,譬如link_to dependencies "merb_helpers","merb-assets" #orm 我们使用datamapper,这个在init.rb中有,去掉注释即可,Merb也可以使用AR use_orm :datamapper #去掉rspec的注释 use_test :rspec 再执行下 merb-gen 会生成一个database.yml.example mv config/database.yml.example config/database.yml 修改,我这里使用的是mysql,这个和rails一样,没啥特殊的地方 # This is a sample database file for the DataMapper ORM development: &defaults # These are the settings for repository :default adapter: mysql database: test_dev username: root password: password host: localhost socket: /var/run/mysqld/mysqld.sock socket的值不知道,可以通过mysql_config查看 mysql_config --socket 简单的建立个model,和rails一样也有resource的脚手架 merb-gen resource user id:integer login:string email:string created_at:date_time 会生成mode,controller,views,helper以及rspec的代码。 修改mode/users.rb将id修改为主键 class User include DataMapper::Resource property :id, Integer, :serial=>true #..... end 和上面的auto_migrate!一样,也有rake相应的建表task rake -T | grep 'rake dm' 会看到所有的tasks 其中 rake dm:db:automigrate 和上面的一样,先drop再create rake dm:db:autoupgrade 仅仅添加新增的字段,不会drop表,也不会删除字段 执行 rake dm:db:automigrate 下一步 修改route.rb Merb::Router.prepare do |r| # RESTful routes #增加 r.resources :users #..... r.default_routes # Change this for your home page to be available at / #修改默认的页面转向users的index r.match('/').to(:controller => 'users', :action =>'index') end 安装mongrel sudo gem install mongrel 启动 merb 默认端口为4000,浏览下http://localhost:4000/,增删改查也应该就出来了 和我们在rails中一样,也可以传递不同的参数,譬如 merb -p 3000 -e production 等等,默认启动了mongrel.更多查看 merb --help 安装thin sudo gem install thin 以thin启动 merb -a thin 启动多个cluster结点 merb -a thin -c 2 停止 merb -K all TODO: RSpec 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-05
DM很慢,所以Merb的整体性能比Rails高不了多少
Merb可以看成一个拆分得更细的Rails,不使用的功能不导入,以此来提高性能 但是往往使用频率很高的功能被排除在core之外,还是不得不去用那些扩展 Merb的code比Rails的好看倒是真的 另外关注Waves |
|
返回顶楼 | |
发表时间:2008-06-05
neodoxy 写道 DM很慢
能否提供点实际测试描述 |
|
返回顶楼 | |
发表时间:2008-06-05
Raecoo 写道 neodoxy 写道 DM很慢
能否提供点实际测试描述 Merb应用如果用DM做ORM层,那瓶颈就是DM 就如同Rails的瓶颈大多在ActiveRecord 横向比较,DM相对于ActiveRecord的优势并不明显,所以Merb并不比Rails快很多 据说,DM0.9版会有很高的性能提升,我用的时候是0.3版本 |
|
返回顶楼 | |
发表时间:2008-06-05
由于ruby解析器性能太差,所以抛开数据库端的访问瓶颈来看的话,Rails真正慢还是慢在template的生成这一块,并不在ActiveRecord上面,特别是如果充分利用对象缓存的话。
Merb比较特殊的一点是他是线程安全的,所以可以以ruby的多线程方式去跑,即启动一个mongrel实例,里面有很多线程并发处理web请求,比Rails的纯进程模式肯定要节省很多内存,能够支持的并发量也要大一些。 |
|
返回顶楼 | |
发表时间:2008-06-05
Merb在Template方面做了比较多的工作,解析效果也比Rails好些
最简单的例子就是很多的Helper方法去除了对Routes的解析而直接生成HTML Merb的Routes也比较有特点,非常灵活 |
|
返回顶楼 | |
发表时间:2008-06-05
neodoxy 写道 Raecoo 写道 neodoxy 写道 DM很慢
能否提供点实际测试描述 Merb应用如果用DM做ORM层,那瓶颈就是DM 就如同Rails的瓶颈大多在ActiveRecord 横向比较,DM相对于ActiveRecord的优势并不明显,所以Merb并不比Rails快很多 据说,DM0.9版会有很高的性能提升,我用的时候是0.3版本 貌似看到国外有篇文章做了相关的测试,Merb的性能比Rails好像要高60%多 但测试的逻辑还是显的比较简陋,并不能完全说明问题 |
|
返回顶楼 | |
发表时间:2008-06-05
Rails的routes解析是非常耗时的,用method_missing搞,还调用堆栈特别深。不过话说回来,自己在template里面直接拼URL,不那么优雅的去用他的routes的话,就可以绕过这个性能瓶颈。
merb官方网站声称比Rails快20%-40%,我觉得这个性能优势比我想像的要小的太多,总之,不管怎么搞法,性能问题的根源目前还是ruby解析器的问题。所以等ruby1.9.1发布正式版才是性能问题解决之道。 |
|
返回顶楼 | |
发表时间:2008-06-06
还是要靠VM来提高啊,ruby自己的速度上不去,就是一个慢字
MegLev这东西不知道和YARV相比谁比较猛 |
|
返回顶楼 | |
发表时间:2008-06-07
Raecoo 写道 neodoxy 写道 Raecoo 写道 neodoxy 写道 DM很慢
能否提供点实际测试描述 Merb应用如果用DM做ORM层,那瓶颈就是DM 就如同Rails的瓶颈大多在ActiveRecord 横向比较,DM相对于ActiveRecord的优势并不明显,所以Merb并不比Rails快很多 据说,DM0.9版会有很高的性能提升,我用的时候是0.3版本 貌似看到国外有篇文章做了相关的测试,Merb的性能比Rails好像要高60%多 但测试的逻辑还是显的比较简陋,并不能完全说明问题 抛开ORM层来说的确是快了,但是加上ORM曾就不乐观了 我用ruby处理一些网络游戏周边应用,比如用户管理/点卡充值 这里就简单说一下用户管理,比如我要从数据库的login记录里分析使用多个帐号的用户,就要搜索一定用户的登录ip和mac以及这些ip和mac上的其他用户,然后再搜索这些其他用户的关联帐号来保证结果的准确性 对于有几十万用户,上亿条登录记录的数据表来说,瓶颈完全在数据库上,我分别用Merb和Rails实现,可惜Merb没有给我带来惊喜,而他的精简反而使我要做更多额外工作 可能是我的水平不到家吧.或者这个例子特殊,但这也算是个实例,抛砖引玉 |
|
返回顶楼 | |