華文Ruby Blog
JavaEye3.0开发手记之三 - 狮身人面
网站:JavaEye 作者:robbin 发表时间: 2007-09-10 19:02 此文章来自于 http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://robbin.javaeye.com/blog/122696
Sphinx的含义是“狮身人面像”,是古埃及的金字塔建筑,传说Sphinx是有翼的狮身女怪,她常叫过路行人猜谜, 猜不出者即遭杀害。
但是我这里说的Sphinx是一个高性能的搜索引擎:
Sphinx是一个俄国人开发的搜索引擎,它的主要特点是:
一、性能非常出色
150万条记录一两分钟就索引完毕,2-4GB以内的文本检索速度不到0.1秒钟。ferret也望尘莫及,更不要说lucene了。
二、和数据库集成性很好
Sphinx通过配置文件可以自行读取数据库信息做索引,不依赖任何外部的应用程序,并且可以作为一个daemon进程启动,支持分布式检索,并发响应性能很好。因此很多过去使用ferret的人因为并发检索的问题都改用Sphinx了。
三、可以做MySQL的全文检索
MySQL的数据库引擎是可插拔的结构,Sphinx开发了一个SphinxSE数据库引擎,可以在编译MySQL的时候直接编译到MySQL里面去,这样的话,可以在数据库级别支持高性能的全文检索,那么你可以以如下SQL方式去全文检索了:
select * from xxxx where query='test;sort=attr_asc:group_id' AND ....;
很棒吧。
四、RoR支持也很棒
有一个acts_as_sphinx插件,类似acts_as_ferret,集成到RoR里面很简单。
Sphinx目前可能存在的问题估计还是中文分词问题:
Sphinx支持UTF-8编码的分词,但是他自己的文档上面说仅仅支持英文和俄文的分词,因此我估计对中文分词可能还不能很好的支持。
总之,Sphinx是我们另外一个很棒的选择。
《 JavaEye3.0开发手记之三 - 狮身人面 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>
推荐相关文章:
让ActiveRecord更加active
JavaEye3.0开发手记之二 - rails的UTF-8支持造成的正则表达式问题
JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA
从ChinaonRails网站访问来源看RoR人才的分布情况
robbin写了一篇从JavaEye网站访问来源看软件公司的区域选择:
从上图可以看出,在国内一线城市北京、上海、广州和深圳四个城市,软件人才的储备北京遥遥领先,上海和广州居中,差不多是北京的一半,而深圳则落入二线城市的行列。另外值得注意的是杭州的人才储备也非常丰富,虽然没有办法和周边城市上海相比,但是也远远超过了深圳。
然后我查看了一下ChinaonRails网站访问来源,ChinaonRails是国内专业的Ruby on Rails社区,从下图可以看出,访问来源基本和JavaEye网站一致,看来北京,上海,广州在Ruby on Rails人才方面也是排名前三甲。
//
//
current_user = {id: ‘’, username: ‘’, nickname: ‘’};
window.notes_container = new PhotoNotesContainer(’photo_notes’, ‘photoImgDivff80808114d6a24e0114e8fdd3fc1513′, photo, current_user);
$(’photo_img’).addEvent(’load’, show_notes_initially);
//
//
终于我也 Twitter 了
我在2007年3月份的时候就注册了 http://twitter.com/Caiwangqin ,但从来没有发布过任何内容。我还是习惯以Blogging的形式发布内容,如我的行程。身边不断的有人在说 Twitter, 看到众多熟脸都在使用 Twitter, 收到了 someone is now following you on Twitter! 于是我也开始尝试了。
使用 GTalk 更新 Twitter不错,这大大降低了信息的发布成本,但我还是固执的认为这些发布的简短信息不如 Blogging 有用,仅能满足与人联系的需求,社交可以用 Twitter, 分享、记录一篇还是要 Blogging .
Working with MindMap
首先感谢CSDN的韩磊发给我这个好用的工具PowerCam5, 我刚才尝试录制了8分19秒的关于使用MindMap(思维导图)的语音课程。第一次使用这个工具,看不到录音条,边想边说的,有些磕磕巴巴,讲解不是很流畅,其中有多处错误,熟悉此软件的人就不必浪费时间观看了,多多包涵。这个形式还是很好的,之后我会录制系列的 Ruby on Rails 相关课程。
希望大家善用佳软,更有效的组织信息,以下是课程学习地址:http://yaymedia.cn/course/mindmap/
Capistrano 自動化 deploy Rails
今天花了點時間在自己的 server(FreeBSD) 上試用 Capistrano,這是一套讓你在 local 透過 SSH 自動執行遠端任務的 deployment system,當然最常見的應用就是 deploying Rails applications 了。
老實說,第一次的設定還真讓我 try and error,尤其前一陣子剛出 Capistrano 2.0 版,變更了一些用法,所以很多舊範例就不敢用了,而官網上的文件也實在有點簡略說… ^^@ 其中關於 the “spin” script 的部份不甚解原理(?),最後的做法除了讓登入的帳號有 sudo 權限,也需要先手動登入執行第一次的啟動 sudo script/process/spin。
anyway… 還是照著 Getting Started 配著過時的 AWDwR 2nd. Chap 27 來做,值得注意的有
svn 的帳號密碼要這樣設定
set :scm_username, “username” # svn user name
set :scm_password, “password”
另外你應該不會把 database.yml 給 commit 出去,所以先建立好一份來做複製。
namespace :deploy do
desc “Create database.yml ”
task :after_update_code, :roles => [:web] do
db_config = “#{shared_path}/config/database.yml.production”
run “cp #{db_config} #{release_path}/config/database.yml;”
end
end
最後的成果是只要打 cap deploy,就會自動連到 server 上,執行 svn checkout 出最新版本,跑些客製的 script,然後重新 restart mongrel cluster。
為甚麼 Capistrano 這麼被重視呢? 這種 deploy 的過程,其實必定是個一再執行的過程(嗯,除非不需要再開發升級了),而且隨者時間演進,這個過程常常會有各種客製的 script 要執行,例如檔案變更/重新載入 config/清除 cache…etc
然而在發行新版本的時候,往往卻也是已經寫了好多程式,累的要命的時候,這時候一個已經自動化的 deploy process 就像甘霖露水,你不會想一個個手動執行那些複雜步驟的(而且萬一漏做了甚麼,都是無可預期的 disaster )。
Update(2007/9/1): 改在 Mac 上做 deploy,又卡關了好久:
把 /script/process/spin 的內容改成慣用的 mongrel_rails cluster::restart。
depoly.rb 中所有 run rake 的地方,多加完整 rake 路徑。以及 set :rake, “/opt/local/bin/rake”
我暫時沒有開 sudo 權限,所以 cap deploy 的最後一步 restart 會失敗,到這裡就只好手動囉。
Update(2007/9/4): 關於 sudo,應該再新增以下設定
set :use_sudo, false
至此應該一步 cap deploy 就可以搞定了… :)
Update(2007/9/5): 真是一天一牛步在修這個 script,請再加上環境變數 (因為 Capistrano 用 SSH 登入後並不會讀取你的環境變數啊~),還有 deploy:restart 也重寫過吧,不需要使用 /script/process/spin :
default_environment[”PATH”] = “/Users/ihower/bin:/opt/local/bin:/bin:/sbin:/usr/bin:/usr/sbin”
desc “Restart Mongrel”
task :restart, :roles => [:app] do
run <<-EOF
cd #{current_path} && mongrel_rails cluster::restart
EOF
end
至此終於一步 cap deploy 就可以搞定了(Mac)… :)
by the way…解釋一下架構,這邊是用 mongrel_rails cluster 跑在一群 ports 上(例如8000~8002),再搭配 Apache Proxy 機制把 HTTP request balance 到各個 mongrel 上。這是目前 deploy rails 最建議的 solution。
關於 apache settings 照抄 AWDwR 2nd. 的就可以 work 了,跑 cap deploy 的時候也不需要重開 apache,這兩個元件是獨立的。
9月2日上海之行
已确定行程 9.2日 在上海,有Ruby on Rails相关需求人士可以见面聊聊。携程旅行网还是很方便的,以下是我的航班:
北京-上海 往返机票
出发航班 MU5122 (中国东方航空公司)2007-9-1 18:00:00
返回航班 CA1580 (中国国际航空公司)2007-9-3 9:35:00
