由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 这个应该咋做好?
相关主题
why do we need to map user threads to kernel threads?讨论个idea题
compile error[请教]friend class in C++ template
call matlab within R (用system())user agent string随时间会变吗?
Java job schedulera c++ question for template
把windows batch放task scheduler里,一闪而过[合集] 关于template和inheritance的问题请教
大家spring batch都是怎么管理的,有ui的tool吗[合集] 又被羞辱了一把... (转载)
lightroom请科普下双路deep learningDefault function template arguments
如何定时上传excel文件至sharepointC++ template problem
相关话题的讨论汇总
话题: rule话题: string话题: user话题: email话题: template
进入Programming版参与讨论
1 (共1页)
o***g
发帖数: 2784
1
假设是一些tips
每天要给不同的用户推不同的tip
但是每个tip的触发条件都可能是不同的
比如生日 冬天 地理位置 某个tip之后的几天。。。。
这个触发条件怎么设计比较好?或者有轮子?
o***g
发帖数: 2784
2
自己顶一下
各位大神,出手啊

【在 o***g 的大作中提到】
: 假设是一些tips
: 每天要给不同的用户推不同的tip
: 但是每个tip的触发条件都可能是不同的
: 比如生日 冬天 地理位置 某个tip之后的几天。。。。
: 这个触发条件怎么设计比较好?或者有轮子?

w**z
发帖数: 8232
3
trigged event 事先都要insert 到 table 里。搞个cron job, 定时query table。

【在 o***g 的大作中提到】
: 自己顶一下
: 各位大神,出手啊

w***g
发帖数: 5958
4
做一个规则引擎。

【在 o***g 的大作中提到】
: 假设是一些tips
: 每天要给不同的用户推不同的tip
: 但是每个tip的触发条件都可能是不同的
: 比如生日 冬天 地理位置 某个tip之后的几天。。。。
: 这个触发条件怎么设计比较好?或者有轮子?

N********n
发帖数: 8363
5

Workflow, if you are using .Net

【在 o***g 的大作中提到】
: 假设是一些tips
: 每天要给不同的用户推不同的tip
: 但是每个tip的触发条件都可能是不同的
: 比如生日 冬天 地理位置 某个tip之后的几天。。。。
: 这个触发条件怎么设计比较好?或者有轮子?

z****e
发帖数: 54598
6
用户login的时候,触发一个event
然后这个event依次判断每个tips的产生
你这些tips不是mutually exclusive的吧?
一个用户会有[0,n]个tips返回
自己写这些也没多难维护撒,不用轮子也没啥
p**r
发帖数: 5853
7
+1,个人感觉这样比较节约资源。

【在 w**z 的大作中提到】
: trigged event 事先都要insert 到 table 里。搞个cron job, 定时query table。
o***g
发帖数: 2784
8
好吧,我需求没说清楚
这些tip不是开发阶段能确定的,是business user维护的
触发条件可能还带and or
需要在功能强大和开发简单之间做一个折中,找到合适的点,并且也别整的太复杂,
business user不需要学习最好了
楼上有人提规则引擎,这个就属于功能太强大
还有db怎么存这些触发条件也是个问题
p**r
发帖数: 5853
9
wwzz那个方案是最适合这种情况的,
biz user添加的触发一个逻辑层产生events,
所有的events存一个list,
db如果和trigger自己google去,
或者写个check function定时查也可以。

【在 o***g 的大作中提到】
: 好吧,我需求没说清楚
: 这些tip不是开发阶段能确定的,是business user维护的
: 触发条件可能还带and or
: 需要在功能强大和开发简单之间做一个折中,找到合适的点,并且也别整的太复杂,
: business user不需要学习最好了
: 楼上有人提规则引擎,这个就属于功能太强大
: 还有db怎么存这些触发条件也是个问题

o***g
发帖数: 2784
10
你是说这个?
http://dev.mysql.com/doc/refman/5.5/en/triggers.html

【在 p**r 的大作中提到】
: wwzz那个方案是最适合这种情况的,
: biz user添加的触发一个逻辑层产生events,
: 所有的events存一个list,
: db如果和trigger自己google去,
: 或者写个check function定时查也可以。

相关主题
大家spring batch都是怎么管理的,有ui的tool吗讨论个idea题
lightroom请科普下双路deep learning[请教]friend class in C++ template
如何定时上传excel文件至sharepointuser agent string随时间会变吗?
进入Programming版参与讨论
p**r
发帖数: 5853
11
db trigger能做得有限,
你这情况肯定需要通知用户,搞不好还要整些图片,啥的。
我建议你写个本地或远程funciton,定期检查比较方便。
biz用户可以各种定events,然后添加到list里
比如这是events list
#1 call zhaoce, 1/1/2015
#2 send gift to goodbug, 2/1/2015
#3 fuck someone, 3/1/2015
你写个功能定期检查这个list,
要是不频繁,用个time range把前后时间覆盖了
不久搞定了。

【在 o***g 的大作中提到】
: 你是说这个?
: http://dev.mysql.com/doc/refman/5.5/en/triggers.html

N********n
发帖数: 8363
12
Try not to use db triggers. Hard to manage in the long run.
o***g
发帖数: 2784
13
我举个例子
所有用户生日那天收到生日快乐这个tip
这个咋做?
biz user咋操作?内部咋运转的?

【在 p**r 的大作中提到】
: db trigger能做得有限,
: 你这情况肯定需要通知用户,搞不好还要整些图片,啥的。
: 我建议你写个本地或远程funciton,定期检查比较方便。
: biz用户可以各种定events,然后添加到list里
: 比如这是events list
: #1 call zhaoce, 1/1/2015
: #2 send gift to goodbug, 2/1/2015
: #3 fuck someone, 3/1/2015
: 你写个功能定期检查这个list,
: 要是不频繁,用个time range把前后时间覆盖了

N********n
发帖数: 8363
14

You need some kinda periodical tasks / services scanning the db
records and execute.

【在 o***g 的大作中提到】
: 我举个例子
: 所有用户生日那天收到生日快乐这个tip
: 这个咋做?
: biz user咋操作?内部咋运转的?

p**r
发帖数: 5853
15
我算是明白,你丫是找人做项目,不是问问题,哈哈。
你先说说你自己打算怎么做?

【在 o***g 的大作中提到】
: 我举个例子
: 所有用户生日那天收到生日快乐这个tip
: 这个咋做?
: biz user咋操作?内部咋运转的?

o***g
发帖数: 2784
16
流程上肯定是这么做
我的问题是trigger的条件怎么做
有一种做法是,把公式存下来,数据库里就一列,就存这个公式
比如"$age>18 && $age<25"
但是读这个公式的就需要parse等等事情
biz user的后台界面得能产生这个公式,这个也是很复杂的
如果这么做,有没有轮子?公式解析和界面上管理这个公式都需要轮子
还有一种土法,比如光age,可是加两列ageFrom ageTo。还有其他各种变量都往上加,
这个处理起来方便很多,但是限制也是很多。比如biz user想要所有属羊的,就做不了。

【在 N********n 的大作中提到】
:
: You need some kinda periodical tasks / services scanning the db
: records and execute.

X****r
发帖数: 3557
17
抛个砖:把每个条件的逻辑和参数分开。逻辑用代码实现,每种有一个名字,不放在数
据库里。数据库里每个条件包括它所用的逻辑的名字,以及参数列表。

了。

【在 o***g 的大作中提到】
: 流程上肯定是这么做
: 我的问题是trigger的条件怎么做
: 有一种做法是,把公式存下来,数据库里就一列,就存这个公式
: 比如"$age>18 && $age<25"
: 但是读这个公式的就需要parse等等事情
: biz user的后台界面得能产生这个公式,这个也是很复杂的
: 如果这么做,有没有轮子?公式解析和界面上管理这个公式都需要轮子
: 还有一种土法,比如光age,可是加两列ageFrom ageTo。还有其他各种变量都往上加,
: 这个处理起来方便很多,但是限制也是很多。比如biz user想要所有属羊的,就做不了。

s*i
发帖数: 5025
18
可以考虑这么设计:
1. 一个尚未发生的Event表,按时间排序,每个event有个expected trigger time;
2. 一个Action的列表。注意,Action本身可以产生events的;
3. 一个events到actions的map (1: n)
具体到怎么加新的event,是另一个话题。比如“生日前一天”就可以是一个event。生
日那天也是一个 event。
当event handler(基本上就是处理 now > event expected time)发现可以发生的
event的时候,去执行map里的actions。
[发表自未名空间手机版 - m.mitbbs.com]
o***g
发帖数: 2784
19
思路很好,多谢
还是万黑给力啊

【在 X****r 的大作中提到】
: 抛个砖:把每个条件的逻辑和参数分开。逻辑用代码实现,每种有一个名字,不放在数
: 据库里。数据库里每个条件包括它所用的逻辑的名字,以及参数列表。
:
: 了。

a*f
发帖数: 1790
20
rule engine最灵活吧,用户改动也容易
相关主题
a c++ question for templateDefault function template arguments
[合集] 关于template和inheritance的问题请教C++ template problem
[合集] 又被羞辱了一把... (转载)一个C++ template的问题
进入Programming版参与讨论
w**z
发帖数: 8232
21
rabbitmq 有delayed message
http://www.javacodegeeks.com/2012/04/rabbitmq-scheduled-message
可以看看

【在 s*i 的大作中提到】
: 可以考虑这么设计:
: 1. 一个尚未发生的Event表,按时间排序,每个event有个expected trigger time;
: 2. 一个Action的列表。注意,Action本身可以产生events的;
: 3. 一个events到actions的map (1: n)
: 具体到怎么加新的event,是另一个话题。比如“生日前一天”就可以是一个event。生
: 日那天也是一个 event。
: 当event handler(基本上就是处理 now > event expected time)发现可以发生的
: event的时候,去执行map里的actions。
: [发表自未名空间手机版 - m.mitbbs.com]

z****e
发帖数: 54598
22
其实你自己弄个scheduler也可以
但是我觉得,这个功能只有在用户登陆时候才有用
干脆就在登陆的时候计算就是了
难道用户会长时间在线,需要推送?
s*i
发帖数: 5025
23
如果要是发送spam电邮,光靠用户登录的话不太可靠了。

【在 z****e 的大作中提到】
: 其实你自己弄个scheduler也可以
: 但是我觉得,这个功能只有在用户登陆时候才有用
: 干脆就在登陆的时候计算就是了
: 难道用户会长时间在线,需要推送?

s*i
发帖数: 5025
24
这个轮子好!用Apache 的 dead letter channel实现的。

【在 w**z 的大作中提到】
: rabbitmq 有delayed message
: http://www.javacodegeeks.com/2012/04/rabbitmq-scheduled-message
: 可以看看

o***g
发帖数: 2784
25
app里的notification能从服务器推么?

【在 z****e 的大作中提到】
: 其实你自己弄个scheduler也可以
: 但是我觉得,这个功能只有在用户登陆时候才有用
: 干脆就在登陆的时候计算就是了
: 难道用户会长时间在线,需要推送?

z****e
发帖数: 54598
26
……这个我们用scheduler实现

【在 s*i 的大作中提到】
: 如果要是发送spam电邮,光靠用户登录的话不太可靠了。
z****e
发帖数: 54598
27
这个难点应该在于app端编程
只要app能够通知server并接收notification,都好办

【在 o***g 的大作中提到】
: app里的notification能从服务器推么?
m***h
发帖数: 77
28
一个比较简单直接的办法,主要用数据库。
你要多多少少山寨个configurable的rule repo,让后围绕它做文章。
1, rule
可能在开始的时候business会提供你一些简单的rule to start,以后会增加更复杂的
rule,turn on/off, 或者改参数。
假设business想给第二天生日的用户发封生日快乐邮件,可以用这么个rule table
rule_id: 123
rule_trigger:MORNING_BATCH
rule_name:one_day_befor_user_birthday
rule_sql: select user_id, first_name, last_name, email from user where user.
birth_day = system_date + [DAY_BEFORE_BIRTH_DAY]
parameters: DAY_BEFORE_BIRTH_DAY=1
email_template:202
active:true
另外一个table存email_template
template_id: 202
email_subject: Happy Birth Day [FIRST_NAME]
email_body: Hello, [FIRST_NAME], happy birthday to you!
更复杂点的rule,假设marketing想给那些过去30天买过裤衩的用户促销拖鞋
rule_id: 124
rule_trigger:NIGHT_BATCH
rule_name:marketing_promotion_based_on_last_purchase
rule_sql: select user_id, first_name, last_name, email, user_order.item_desc
,’[PROMOTION_ITEM]’ promotion_item from user, user_order where user.user_
id=user_order.user_id and uesr_order.item=‘[PURCHASED_ITEM]’ and user_
order.purchage_date>systemDate-30
parameters: PURCHASED_ITEM =‘裤衩’,PROMOTION_ITEM=‘拖鞋’
email_template:205
active=true
对应的email_template
template_id: 205
email_subject: here is something for you [FIRST_NAME]!
email_body: Hello, [FIRST_NAME], we think you might be interested in [
PROMOTION_ITEM]
在这个例子里,通过rule SQL和parameters我们能得到一个能“run“ 的SQL或者
script,然后email template定义要送的email内容,这里要用到free marker或者自己
写个东西来替换template里的token。
2,然后做一个UI让business控制这些rule,和template,turn on或者turn off,该时
间,该参数,改email之类,甚至copy一个存在的rule建立新的rule with不同的参数。
基本的crud操作。这个SQL部分得你写。
3,要写一个简单的workflow来run这些rule,比如
void runRule(int ruleId){
Map rule = DB.queryByRuleId(ruleId);
//figure out the sql
String realSql = StringUtil.replaceToken(rule.get(“rul_sql”), rule.
get(“parameters”);
//find the email template
Map emailTemplate = DB.queryTemplateById(rule.get(“
email_template”));
String emailSubjectTemplate=emailtemplate.get(“email_subject”);
String emailBodyTemplate = emailTemplate.get(“email_body”);
//run sql
List> records = DB.runQuery(realSql);
//process every record and send email
for(Map record:records){

String emailSubject = StringUtil.replaceToken(emailSubjectTempate,
record);
String emailBody = StringUtil.replaceToken(emailBodyTemplate, record
);
Email.sendEmail(record.get(“email”), emailSubjet, emailBody)
}
}
至于这么trigger这个workflow,简单的话可以schedule它,fancy点的话发个morning_
batch message,然后用一堆listern/worker来run这些rules
s*i
发帖数: 5025
29
app端是polling 还是双向通信(web socket?)?

【在 z****e 的大作中提到】
: 这个难点应该在于app端编程
: 只要app能够通知server并接收notification,都好办

m***h
发帖数: 77
30
如果client端是mobile app的话,常用push notification,有third party service像
urbanairship,parse什么的。pull得自己整infrastructure.
相关主题
C++ Q73: template (skillport) (转载)compile error
C++ Q90 - Q92 (转载)call matlab within R (用system())
why do we need to map user threads to kernel threads?Java job scheduler
进入Programming版参与讨论
N********n
发帖数: 8363
31

Said it early on: use Workflow if on .Net, or FOSS counterparts
if not.

【在 o***g 的大作中提到】
: 流程上肯定是这么做
: 我的问题是trigger的条件怎么做
: 有一种做法是,把公式存下来,数据库里就一列,就存这个公式
: 比如"$age>18 && $age<25"
: 但是读这个公式的就需要parse等等事情
: biz user的后台界面得能产生这个公式,这个也是很复杂的
: 如果这么做,有没有轮子?公式解析和界面上管理这个公式都需要轮子
: 还有一种土法,比如光age,可是加两列ageFrom ageTo。还有其他各种变量都往上加,
: 这个处理起来方便很多,但是限制也是很多。比如biz user想要所有属羊的,就做不了。

l******t
发帖数: 55733
32
这应该倒过来,生日自己注册递归事件

【在 N********n 的大作中提到】
:
: Said it early on: use Workflow if on .Net, or FOSS counterparts
: if not.

c*********e
发帖数: 16335
33
这个太容易了,就是建立一个表,把所有的判断的items各自写一个row放表里。然后用
户登录了首先就query这个表,可以写个stored procedure来拿到结果。

【在 o***g 的大作中提到】
: 我举个例子
: 所有用户生日那天收到生日快乐这个tip
: 这个咋做?
: biz user咋操作?内部咋运转的?

d******e
发帖数: 2265
34
这个你抽象一个engine.
里面有很多obj.
每个obj,有一组规则
加上一个state changed event call back来激活。
还需要什么?

【在 o***g 的大作中提到】
: 假设是一些tips
: 每天要给不同的用户推不同的tip
: 但是每个tip的触发条件都可能是不同的
: 比如生日 冬天 地理位置 某个tip之后的几天。。。。
: 这个触发条件怎么设计比较好?或者有轮子?

o***g
发帖数: 2784
35
多谢,看来这个是商业上的正统解决方案
sql是谁写的?biz user还是开发人员?

user.

【在 m***h 的大作中提到】
: 一个比较简单直接的办法,主要用数据库。
: 你要多多少少山寨个configurable的rule repo,让后围绕它做文章。
: 1, rule
: 可能在开始的时候business会提供你一些简单的rule to start,以后会增加更复杂的
: rule,turn on/off, 或者改参数。
: 假设business想给第二天生日的用户发封生日快乐邮件,可以用这么个rule table
: rule_id: 123
: rule_trigger:MORNING_BATCH
: rule_name:one_day_befor_user_birthday
: rule_sql: select user_id, first_name, last_name, email from user where user.

1 (共1页)
进入Programming版参与讨论
相关主题
C++ template problem把windows batch放task scheduler里,一闪而过
一个C++ template的问题大家spring batch都是怎么管理的,有ui的tool吗
C++ Q73: template (skillport) (转载)lightroom请科普下双路deep learning
C++ Q90 - Q92 (转载)如何定时上传excel文件至sharepoint
why do we need to map user threads to kernel threads?讨论个idea题
compile error[请教]friend class in C++ template
call matlab within R (用system())user agent string随时间会变吗?
Java job schedulera c++ question for template
相关话题的讨论汇总
话题: rule话题: string话题: user话题: email话题: template