Python版dsd与Node.js版差异(dask结构)
dask结构
Python的dask生成几乎全是字符串拼接来完成的,类似于这样
dsk = {
"step1": "abc",
"step2": 123,
"step3": (method, "step1", "param")
}
result = dask.get(dsk, "step3")
其中,step1
的值为字符串"abc"
,step2
值为数字123
,method
为一个转换步骤的调用,第一个参数为step1
,即字符串abc
,第二个参数为字符串param
,step3
为method
加两个参数的调用结果。
Js的dask可以完全使用Json格式
const dsk = {
"step1": 'abc',
"step2": 123,
"step3": {
"method": ["dataInput_3", "variable", "step2"]
}
}
const result = await dask.get(dsk, "step3")
数据处理
听说数据处理是dsd的强项,如果有大量数据处理的事情,依然可以交给Python去做。 部分数据处理(就咱们现在所用到的绝大多数的所谓的数据处理其实不适合在服务里做,写sql在数据库做是最高效的)都可以放在Node.js里执行。
转换操作
相当于原子操作,找人去做就好了。写js的转换操作一定要比Python的成本低,且运行效率高(这是我估计的,没有严格测试过,网上有人进行过类似的测试)
其它
另外Python版的dsd还有一分部附加的代码,以下附上简化后的代码
def atom( arg0 ,**funcs):
'''
atom
'''
## initial parameters
drools_input_json = arg0
dataSource = data_source(arg0)
dataInput = data_input(arg0)
base_model = DataFrame()
dbaccFind = funcs['dbaccFind']
dbaccSave = funcs['dbaccSave']
dbaccCount = funcs['dbaccCount']
render = funcs['render']
datarender=data_render(render)
solorQuery = funcs['solorQuery']
solorSave = funcs['solorSave']
readFromDatabase=read_From_Database(dbaccFind)
if "params" in drools_input_json:
modelid = get_input_stream(drools_input_json , 'params', 'modelid')
trans_instance_no= get_input_stream(drools_input_json , 'params', 'trans')
trans_template_no= get_input_stream(drools_input_json , 'params', 'template_no')
trans_trans_title= get_input_stream(drools_input_json , 'params', 'trans_title')
elif "param" in drools_input_json:
modelid = get_input_stream(drools_input_json , 'param', 'modelid')
trans_instance_no= get_input_stream(drools_input_json , 'param', 'trans')
trans_template_no= get_input_stream(drools_input_json , 'param', 'template_no')
trans_trans_title= get_input_stream(drools_input_json , 'param', 'trans_title')
else:
raise Exception("前端传参错误 !!!")
if isinstance( modelid,DataFrame ):
param_2 = {"modelid": modelid.ix[0,"modelid"]}
arg2 = get_data_2(["base_model"],[param_2])
data_2 = dbaccFind(arg2)
base_model = decode(data_2,"base_model")
# output = out_put( base_model )
dsk = {
"step1": "abc",
"step2": 123,
"step3": {
"method": ["step1", "param"]
}
}
trans_inst_source =["dataSource_1", "dataSource_2", "dataSource_3", "dataSource_4"]
get_on = pd.read_json ( r"""[{"trans_title":"datarender_1","template_no":"T033","params_list":["medicine_store2017",[{}," {} ",["generateVariable_5"],"T033"],"P_01"]}]""" )
trans_output_no=pd.read_json ( r"""[]""" )
if isinstance( trans_instance_no,DataFrame ):
page_size=arg0['paging']['size']
if trans_template_no.ix[0,"template_no"]=='T002':
return get_dask_test(dsk,trans_output_no[trans_output_no.trans_no==trans_instance_no.ix[0,"trans"]],page_size,dbaccSave,render)
else:
trans_template_no['trans_title']=trans_trans_title.ix[0,"trans_title"]
return get_dask_test(dsk,trans_template_no,page_size,dbaccSave,render)
else:
for i in trans_inst_source:
del dsk[i]
return get_dask_result(dsk,get_on,dbaccSave,render)
这些逻辑相应的需要用js去写,逻辑用一样的就行,不难写。
Web4.0相关
只是这部分跟dsd有关系,一同附上示例代码。
const daoke = {
action1(feidao_data: IFeidaoAiComponentWexinApp, ...args: any[]) {
const dsk = {
"step1": {
"alert": ["this is an action."]
}
};
return dask(dsk, 'step1', feidao);
},
action2(feidao_data: IFeidaoAiComponentWexinApp, ...args: any[]) {
const dsk = {
"step1": {
"alert": ["this is another action."]
}
};
return dask(dsk, 'step1', feidao);
}
} as IDaoke;