- 浏览: 42910 次
- 性别:
- 来自: 上海
最新评论
-
aking86:
大哥,可不可以搞个DEMO出来。这个更管用。道理咱懂,搞出来有 ...
Mapper -
happyking:
可以考虑下nosql来实现,一些知名的SNS都是用NOSQL实 ...
SNS网站feed的设计思考 -
boobmoom:
请问,去IBM以后做的还是ruby 和 rails 吗?
Work@IBM -
chennanfei:
你在哪个部门哪个team?做dev?
Work@IBM -
chennanfei:
有必要给每一个好友创建一条feed记录吗?考虑到用户可以删除好 ...
SNS网站feed的设计思考
文章列表
因为只能用自己公司的数据库产品,所以理所应当的学习DB2...
现在用数据库会想当然的用MySQL的处理方式,发现不妥,DB2整个就是另外的产品,看来要系统的学习下。
找了一本教材,非常非常厚,有点找不着北的感觉,不过还是和以前一样,一边记录一边读好了。
从八月初离开薄荷,加入了蓝色巨人。
可以说是非常艰辛,刚刚入职的这三周,
第一周肠胃出了点问题,在医院躺了2天,
不过还好,问题不大,以后真的要注意饮食了。
IBM的工作很充实,项目也很有挑战性,
这个确实是我的dream work
很多细节可以看出IBM的包容和胸怀
里面很大的问题就是我的英语貌似还是不够用,
开始进去开会是完全听不懂,法国人的英语说的确实比较怪
慢慢的现在能听懂大半,能把自己的意思表达清楚。
进去后,Tim、Terry和Lex都给予我很多的帮助,很感激他们。
接下来要认真把事情做好,
其实技术上的我都很有自信,
虽然IBM里面的技术产品 ...
- 2009-08-24 21:30
- 浏览 1050
- 评论(2)
转载自DHH的blog http://www.loudthinking.com/arc/000479.html
I've said it before, but it bears repeating: There's nothing interesting about how Ruby on Rails scales. We've gone the easy route and merely followed what makes Yahoo!, LiveJournal, and other high-profile LAMP stacks scale high and mighty ...
- 2009-07-21 22:58
- 浏览 943
- 评论(0)
我们开发的时候遇到一种情况,业务量小的时候设计了一张表来存帖子:
posts(id, topic_id, content, status, created_at, updated_at)
当数据量达到百万的量级后,发现此表查找非常慢,这时候想从数据库的角度来改进。
比较常用的方法是,把posts表中的大块数据的字段拆分出来,作为一个子表:
posts(id, topic_id, status, created_at, updated_at)
post_contents(post_id, content)
为了保证其他层不做修改,我们用代理的办法。
cl ...
- 2009-07-15 16:29
- 浏览 2862
- 评论(1)
每个层比如Dao,都有一些通用的方法,这些方法可以放到一个BaseDaoImpl里面,然后所有Dao层的都继承这个类。
这个在Rails也是这种机制:
Controller都是基于ApplicationController < ActionController::Base
Model基于ActiveRecord::Base,其实可以自己添加一个model作为BaseRecord < ActiveRecord::Base
然后把一些通用的方法加入到BaseRecord里面。
- 2009-07-01 13:08
- 浏览 1050
- 评论(0)
Mapper一般使用在连接两层模块。
常用于解耦模型和数据库Model <= Mapper => Database
比如我有一个Person类,我们实现一个PersonMapper类用于获取Person以及完成DB交互转换。
可以看作是将一些层与层之间复杂的转换都交给Mapper来处理。
- 2009-07-01 13:00
- 浏览 1049
- 评论(1)
Gateway模式最适用的场合就是当你需要和外部接口或者程序通信的时候,采用Gateway来隔离接口是非常通用的方式。
我们前一阵子做的开放平台应用的时候这种接口就为我们提供了很多便利:
定一个Gateway和开放平台进行验证,传输信息等操作,应用程序调用此Gateway来完成自己需要的功能。
为了支持多个开放平台,可以定义一个Gateway接口,然后为每个开放平台都实现此接口
Application <=> Gateway <=> Outer space
可以用GatewayFactory来生成不同的Gateway
- 2009-06-24 21:06
- 浏览 1037
- 评论(0)
之前在csdn写了不少关于Rails的笔记,不过觉得一个文件一个文件来读不够有条理,现在可以从更加实用和课题式的角度来读Rails代码。
以WEBrick为例子,WEBrick的请求处理代码如下:
def service(req, res) #:nodoc:
unless handle_file(req, res) # 如果不是处理文件请求
begin
REQUEST_MUTEX.lock unless ActionController::Base.allow_concurrency
unless handle_di ...
- 2009-06-21 21:26
- 浏览 1697
- 评论(0)
OOP中我们经常会遇到继承的问题,在面向对象的语言中表示继承是很简单的。比如Java、Ruby。
但是如果我们需要每个类对应关系数据库的表结构也能够反映出继承关系呢?
假设有一个公司员工俱乐部系统,有足球俱乐部、篮球俱乐部、读书俱乐部,我们已经有如下类结构
class Club {
String name;
Time createTime;
}
class SportsClub extends Club {
Integer teamSize;
}
class FootballClub extends SportsClub {
...
我们在开发中可能会遇到这样一类问题:
1 你需要分步骤录入一个几页信息的大数据表
2 系统会根据输入数据根据某种规则分析出结果报表
3 结果需要持久化
4 结果可以修改
5 结果报表可以根据规则重新生成
6 每个输入有唯一的一个对应的报表
7 分析规则是容易测试的
我在解决这个问题的时候花了很多的时间,绕了个大弯,后来才发现是策略的问题,把最终设计的结果整理下:
Problem
用户记录整个过程的表,每次处理都有这么一张表:
account_id, 用户ID
input_id, 输入
output_id, 输出
stage, 目前阶段(等待输入,输入完毕 ...
- 2009-06-15 13:50
- 浏览 1051
- 评论(0)
SNS网站一般都有这么一个功能:feed或者叫做新鲜事之类的
之前在我们自己的网站也做了类似的一个功能,当时让人最郁闷的就是数据量的问题,上网搜了下,大部分结构都是类似。
我当时设计了这么一种简单的机制,数据 ...
- 2009-06-14 14:19
- 浏览 6274
- 评论(2)
Imagine that you are create a computer machine, if you create a class named Computer
So the initializer will be such a painful and tedious parameter monster, you will find that it is a mess.
So the builder pattern make it much clear.
class ComputerBuilder
attr_reader :computer
de ...
- 2009-06-11 21:00
- 浏览 959
- 评论(0)
Factory is used to integrate the creation of some related object into one responsory class:
class PondOrganismFactory
def new_animal(name)
Frog.new(name)
end
def new_plant(name)
Algae.new(name)
end
end
class JungleOrganismFactory
def new_animal(name)
Tiger. ...
- 2009-06-10 13:36
- 浏览 948
- 评论(0)
回溯算法:
就是搜索一棵状态树的过程,这个过程类似于DFS,但是在决定搜索下一步的时候先作一次判断。如果ok再继续下一步搜索,这里等于是进行一次启发式的剪枝。
一般会有这么一行:
backtrack(current_state) {
// blalala
for next_state in next_states(current_state)
if (possible(current_state, next_state))
backtrack(next_state);
// blalala
}
- 2009-06-09 08:53
- 浏览 1876
- 评论(0)
以前业余的时候总喜欢去TopCoder上玩算法,之前做了不少题目,总结下,从里面的一些education文章整理下一些解题办法,重新学习学习。
brute force 就是穷举算法:按照问题定义来遍历所有情况,并且题目规模较小。
比如这道题 http://www.topcoder.com/stat?c=problem_statement&pm=3005&rd=5858
我们在大学数据结构学到的string index算法就是一个典型。
一般对性能要求不高,规模较小的应用可以这么搞。
- 2009-06-09 08:53
- 浏览 1072
- 评论(0)