哪位Erlang大神能帮忙解决个问题,我在Erlang中查询Mysql数据获得user_id 返回后是一个列表

哪位Erlang大神能帮忙解决个问题,我在Erlang中查询Mysql数据获得user_id 返回后是一个列表,第1张

可以试试这样:

将Sql = "update XXX set XXX=1 where XX in".

然后在lists:foldl/3用户ID列表时,再将id拼凑到Sql中,这样,最后输出的结果是整一条sql语句,如:

"update XXX set XXX=1 where XX in (1,2,3,4)"

使用lists:concat([SqlAcc," (",N])、lists:concat([SqlAcc,",",N])、lists:concat([SqlAcc,",",N,")"])

,应该是可行的.

参考资料:

https://www.cnblogs.com/me-sa/archive/2011/07/12/erlang0005.html

Erlang节点之间建立连接,可以使用net_adm:ping(),参数填写指定节点名字,连接成功返回pong,失败返回pang。

使用net_adm:ping()可以连接上指定节点,但实践中我们不仅仅是要建立连接,比如我们需要在与其它节点建立连接或者其它节点断开的时候做一些事情,比如在节点当掉的时候记录日志,这就需要在对应的时机取得相应的信息

Erlang在net_kernel库中提供了这样的方法:net_kernel:monitor_nodes(Flag)调用这个方法来订阅节点状态变动的消息.一个节点加入的时候会向所有的订阅进程发送一个nodeup消息,一个节点断开的时候会发送nodedown消息.

api: net_kernel:monitor_nodes(true, [{node_type,all}]).

rpc:call(node,mod,fun,args).

rpc:cast(node,mod,fun,args).

本质上是调用gen_server:call/cast, 把消息发送到在目标节点的rex进程(gen_server),然后对消息进行处理.

个人建议学习Golang,主要原因如下:

Erlang的硬伤在于代码的可读性、表现力。为什么说是硬伤? 因为对一门语言来说,语法是不大可能会大幅度变更的, 而且不会出现大的变化;

Erlang的软肋在于高质量的库少。尽管有不少杀手级应用, 同样Go在这方面也是软肋, 这一点对于一个不到五年的语言有情可原, 但对于一个20多年的语言是不是有点说不过去;

Erlang不合群。 这主要体现在跟其他语言的交互性上, 当然这也有深层次的原因, Erlang本身有自己的哲学, 如出错恢复机制, 你融入一个其他语言的东西进去, 这帐就不好算,就好比你硬要让一个喝咖啡的跟一个吃大蒜的坐在一起, 总之你写一个Erlang的port远远比Go复杂, 甚至比Python/Java还要复杂, 这就造成了Erlang在底层编程上效果不是很好, 没法利用linux已有的很多优秀成果,我一直认为Erlang的什么的mysql/pg/oracle驱动都没有必要存在, Erlang一定是一个self-container应用, 你只要用到了其他东西, 根据木桶理论, 你就不敢号称9个9,以系统的眼光看问题, 我觉得一个系统的鲁棒性不能依赖于某一组件, 这也是为什么爱立信本身的Erlang应用并不广泛;

Erlang的的报错信息太让人纠结了。在Erlang中一切都是并行的, 所以它根本不care是物理哪一行出错, 只跟Actor绑定, 然后告诉你Actor的ID和出错代号。这一点Golang就做了很好的折中, 不需要并行的时候你老老实实的写串行代码, 需要并行的时候也有较复杂的机制来应对, 合乎情理。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6128817.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存