该帖已经被评为良好帖
|
|||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||||||||||||||||
发表时间:2008-10-20
我是这样做的
1.配置 action字典表 告诉系统那些action需要生成动态 2.与action字典对应有一张action的详细配置表,比如,合并动态,类型等一些数据,配置中关键是占位符%s 比如:<a class='name yellow' href='#{ctx}/mag.do?uid=%s'>%s</a> 发表日志 %s <a href='#{ctx}/Journal/view.do?id=%s&uid=%s'><br/>继续阅读</a> 有些东西需要翻译下 呵呵 3.在crud中添加 xxxManager.add(new String args[]{"",""}); 4.在add方法中拿到action空间名和action名 找到对应的字典与配置 当然在上面的方法中,还要找一个合适的位置注入用户,ip,名字空间和action名称。。。这些数据 就可以了 |
|||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||
发表时间:2008-10-20
当然像其它的社区 可能会更加方便添加动态 期待大家讨论
|
|||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||
发表时间:2008-10-20
不要想的太复杂了,不要追求先进的技术。
|
|||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||
发表时间:2008-10-21
我认为这个架构设计,应该从每个用户考虑。首先我们应该定义一个需要记录用户操作的描述,比如当用户添加一个好友时,或者浏览过某篇日志时等等这些,这些操作事先应该声明,让系统知道这些操作将要被记录。
记录的方式有很多重,比如JMS各位大哥们都提到的,还有比较传统的数据记录等等。 这里还要考虑的是记录的时间段,应该要设置一个属性来标志这些操作是哪个时间段的,一般设置为1周吧。 每个用户需记录的动作都得记录下来,而当某个用户登陆时,假设用户登录时会触发调用好友的动态,这时系统会搜索此用户的所有好友的操作记录,并以某种形式包装起来。并传到前段显示。 这里面比较难做到的是如何获取用户的所有好友操作记录。因为要考虑效率问题。 这只是我的初步设想好,请各位多多指点 |
|||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||
发表时间:2008-10-25
SNS网站大多数都是php做,我觉是如果是系统自动记录好友动态的信息,那么如何控制这些动态信息在个人主页显示不显示呢!再说系统如何知道这些操作系统会记录呢!这些问题?
请大家多多指点一下! |
|||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||
发表时间:2008-10-25
除了类似QQ的这样的用户数量, 以上各位的想法都是可行的。
我也在考虑这样的复杂性的应用, 我可能会采用search engine通常采用的机制来完成, 或者使用分布式数据库来用map/reduce完成消息的分发机制。 当然, 这些办法实现都是公司有比较多的技术积累工作。 小公司是非常难以实现的。 不过, PGSQL目前有个项目是基于m/p的项目, 实现了基于PGSQL的分布式应用。 可以实现大规模群集的操作。 希望大家能都去了解下。 目前大规模系统的open source也是越来越多了。 大家在思考问题的时候, 不要拘泥在单一的dbms/jms/log等等技术上。 当然如果是小规模的项目, 每天的PV 在1000W以下的系统, 我觉得无论怎么做SNS都是非常简单的工作。 对于大规模分布式计算/存储的应用有兴趣的可以和吹牛啊, 目前, 我也非常有兴趣。 |
|||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||
发表时间:2008-11-05
看到大家一直在讨论这个问题其实还好了。我们只要记住一点就好。每个人操作总是慢速的,每个人朋友数量也总是有限。所以这样的需求最好设计方法就是,每个人有操作的时候记录他的操作,同时给他的朋友信息表里插一条信息copy,这样每个人想要了解自己的朋友作什么事情,只要去读取信息COPY表里的数据就可以了。
|
|||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||
发表时间:2009-01-03
dank 写道 看到大家一直在讨论这个问题其实还好了。我们只要记住一点就好。每个人操作总是慢速的,每个人朋友数量也总是有限。所以这样的需求最好设计方法就是,每个人有操作的时候记录他的操作,同时给他的朋友信息表里插一条信息copy,这样每个人想要了解自己的朋友作什么事情,只要去读取信息COPY表里的数据就可以了。
这样数据冗余就太多了,而且好友如果很多的话,要同时插入很多记录 前面的用用户独立的js来存储记录的方式我也考虑了一下 磁盘io会有负担..... |
|||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||
发表时间:2009-01-03
eason007 写道
最近也在做这个东西,刚才看了大家的讨论,终于想通了该怎么做了。现在给大家说说。 建一日志表,记录所有用户的操作日志,结构如下:
event(事件)
content中保存用户的操作日志,也就是本贴讨论的重点。我采用的方法是前面有同学提到json方式。如: {
其中blog、photo代表某种应用的标识,可以无限添加。只要显示的时候能分析就行。里面的id和title就是内容的属性,结构自定。
至于新旧操作怎么合并,我是采取对event表的插入操作进行拦截实现的——我定义会员所有的操作均调用event的插入方法。
在拦截函数中,先select该会员的记录。如返回为空,则直接插入新记录。如返回记录,则将待插入数据与原数据进行合并。如待插入数据为: {
则合并后的content为: {
{"id":2,"title":"我是谁"}
然后使用update方法即可。
但这里有一个问题就是,如果用户每天或每个数据表清理间隔中(如我的系统定义为2天)都有操作产生,则会累积很巨大的历史记录,我初步考虑是在拦截方法中进行过滤。而如果用户在2天内没有新的操作产生,则会被我另外定义的数据清理任务删除记录。 假如现在有个需求,用户可以自行删除好友的动态,比如他已经看到好友动态某人写blog了,不想再知道这条消息了怎么处理 |
|||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||
发表时间:2009-01-17
rainytooo 写道 eason007 写道
最近也在做这个东西,刚才看了大家的讨论,终于想通了该怎么做了。现在给大家说说。 建一日志表,记录所有用户的操作日志,结构如下:
event(事件)
content中保存用户的操作日志,也就是本贴讨论的重点。我采用的方法是前面有同学提到json方式。如: {
其中blog、photo代表某种应用的标识,可以无限添加。只要显示的时候能分析就行。里面的id和title就是内容的属性,结构自定。
至于新旧操作怎么合并,我是采取对event表的插入操作进行拦截实现的——我定义会员所有的操作均调用event的插入方法。
在拦截函数中,先select该会员的记录。如返回为空,则直接插入新记录。如返回记录,则将待插入数据与原数据进行合并。如待插入数据为: {
则合并后的content为: {
{"id":2,"title":"我是谁"}
然后使用update方法即可。
但这里有一个问题就是,如果用户每天或每个数据表清理间隔中(如我的系统定义为2天)都有操作产生,则会累积很巨大的历史记录,我初步考虑是在拦截方法中进行过滤。而如果用户在2天内没有新的操作产生,则会被我另外定义的数据清理任务删除记录。 假如现在有个需求,用户可以自行删除好友的动态,比如他已经看到好友动态某人写blog了,不想再知道这条消息了怎么处理 回楼上。要做也可行,即然都用了json。那就把你的好友都放进来。要删除的去掉就OK了 |
|||||||||||||||||||||||||
返回顶楼 | |||||||||||||||||||||||||