NoSQL 渐渐火了起来,最近同事也在讨论这个问题,一不做,二不休,就学习了下,mongodb是采用C++写的,开源,免费,目前已经有公司(10gen)在背后提供商业支持,文件之小,windows下载二进
制包解压后是45M左右,linux下的就更小了,读写操作性能之高,即使是在大数据量,大并发的情况下,也能保持良好的性能,可以索性,例如可以结合memcached,sphinx使用,哇。。。cool。。。
这两天利用mongodb + sinatra 做了个短地址服务网址,当然只是自娱自乐一把而已,domain太ugly了,地址是 http://url.wxianfeng.com,这编来介绍
rails中使用mongodb的入门教程,是railscasts上的那篇教程,但是有许多注意点,在此重点指出。
在开始这个demo前,如果你对mongodb还不熟的话,建议先学习下mongodb,就想先学习下mysql 一样,掌握一些基本的操作过程
我的环境:windows xp + rails 2.3.5 + mongodb 1.4.4 + mongo_mapper 0.8.2
1,安装需要的gem包
gem install mongo_mapper
如果顺利的话,可以安装成功,并且包依赖的其他gem也都同时安装上了 , 例如我在美国的linode服务器上,直接执行上面命令,就安装成功了,但是在大陆无法安装成功,至少我是经过下面的安装步
骤成功的:
gem install jnunemaker-validatable --source http://gemcutter.org gem install bson --source http://rubygems.org gem install mongo --source http://gemcutter.org gem install plucky --source http://gemcutter.org gem install mongo_mapper --source http://gemcutter.org
2,新建rails工程,修改你的enviroment.rb
config.gem "mongo_mapper",:source=>"http://gemcutter.org" config.frameworks -= [:active_record] # - 代表不加载 active_record
在这里需要注意,当你需要使用scaffold生成代码时,必须把 – 给去掉,来加载active_record,因为scaffold默认需要使用activerecord,当你开启server时,再把 – 号给加上
4,修改 database.yml
development: adapter: mysql encoding: utf8 reconnect: false database: trade_supplier_development # pool: 5 username: root password: root # socket: /var/run/mysqld/mysqld.sock host: localhost
需要保证mysql的username,和 password正确,还是为了能使用 scaffold
5,添加 配置,在 config/initializers 下新建 mongo_config.rb
MongoMapper.database = "todo-#{Rails.env}"
配置连接时的db name,start server时不会建立 db,当插入数据时会 同时建立 db 和 collection
6,修改Model
class Project include MongoMapper::Document key :name, String, :required => true key :priority, Integer many :tasks end
class Task include MongoMapper::Document key :project_id, ObjectId key :name, String key :completed, Boolean belongs_to :project end
核心部分就是Model部分,db中的字段是根据 key来动态改变的,没有shama,没有migrate,当你添加新的key时,原有的数据不会改变,上面的两个model是1对多的关系,例如mongo——mapper 可以来
实现 1对1,1对多,多对多的关系,并且和 activerecord操作非常之相像
7,启动 mongodb
进入mongodb bin 目录下
mongod.exe --dbpath E:/mongodb/data
8,启动server
thin start
这一步会提示安装 bson_ext gem包, 我在linux中安装成功了,在windows无法顺利安装,貌似只能在UNIX中安装,需要make编译,但是只要你安装bson包,程序都可以顺利跑起来,BSON是json的binary
形式,这样会节省存储空间,最重要的是减少网络消耗
9,ok
http://localhost:3000/projects 瞧瞧
DEMO源码下载:
http://www.uushare.com/user/fl1429/file/3274129
See:
http://asciicasts.com/episodes/194-mongodb-and-mongomapper
