EOSIO 数据同步

作者: UMU @ MEET.ONE 实验

最近三个月尝试各种方案把 EOSIO 链上交易数据同步到数据库中,踩了不少坑,现总结一下经验。

1. 使用 MongoDB 插件同步 transaction_traces 和 action_traces

原始需求是要链上交易数据,所以先是把 transaction_traces 和 action_traces 都同步。

踩坑:无奈地发现速度跟不上,服务器的时间成本比较高,只能舍弃。

2. 使用 MongoDB 插件同步 transaction_traces

研究插件代码,发现 action_traces 是从 transaction_traces 拆出来的,是重复的,所以把 action_traces 去掉,这次成功追上主网区块高度。

踩坑:transaction_traces 在查询 actions 时不太方便,因为 actions 是放到 transaction_traces 内部的一个数组,要查询具体一个 action 就得分两步走,先在 MongoDB 查询出某个 trx,然后再 actions 数组里遍历。数据库使用端的工程师觉得这样太麻烦,无奈继续放弃这到手的肥肉。

3. 使用 MongoDB 插件同步 action_traces

明确 action_traces 才是客户端想要的后,就只同步 action_traces。

踩坑:action_traces 条数比 transaction_traces 多了三倍以上,又出现追不上区块的问题……

4. 使用 MongoDB 插件同步 action_traces,但只要 transfer 数据

客户端最关心的是 transfer 数据,既然跟不上,就舍弃其它数据。

踩坑:舍弃的数据后期不好补。

5. 考虑 kafka_plugin

有人说 kafka_plugin 同步数据很快,可以追上主网区块。

踩坑:从 kafka_plugin 代码就能看出它没有处理 action_traces,如果还要去后端再拿出来处理,再插入到 MongoDB 里,那开发成本和服务器成本一样又上去了。

6. 从 2019 年的区块开始同步

从 35058781 块开始,插入数据库。之前的区块(1 - 35058780)处理后,仅插入数据量相对很小的 account_controls、accounts、pub_keys,其它数据量大的表不插入。

做这个尝试很重要,因为发现重要的线索:

  • 大约在 2200 万块开始,nodeos 的处理速度下降很多,平均每块要 2-3ms,所以同步慢的原因在于跑 nodeos 的服务器的性能。

  • 在 1 开始的早期区块阶段,同时插入 transaction_traces 和 action_traces,并不能看出比只插入 action_traces 慢,说明 MongoDB 端压力很小。

7. 结论

  • 要追上主网区块高度,nodeos 机器性能要好,2.5GHz CPU 不够用。之前听闻 BOS 要求 BP 使用 4.0GHz 的 CPU,现在看起来也是有道理的……以性能成本换取时间。

  • MongoDB 集群,按之前的文章《为 EOSIO MongoDB 插件搭建高可用集群》的配置,插入阶段毫无压力。

  • 插件代码有些问题,需要优化,最明显的就是 queue_size 的设计不合理,打印处理时间太长的提示也不合理。

    • queue 函数是个模板,所有的 queue 都调用它,但 max_queue_size 和 queue_sleep_time 缺只有一份,这可能导致一个 queue 导致的 queue_sleep_time 加大,影响到其它 queue,即整体的休眠时间会无用地加大。

    • 打印处理时间没有按照 max_queue_size 变化,当 max_queue_size 设置大时,打印就很频繁,带来延迟。

  • 建议:一定要注意成本问题!如果查询量不是很巨大,找点友商的数据源用用就好了,自己搭建的成本好高……但如果查询量太大,或者友商卖太贵,以上经验就是很好的参考了。

“你真的懂稣吗?”——答对也没钱

判断题

  1. 稣从小喜欢富婆,至今(2019 年)未变。

  2. 相比恋爱的过程,稣更喜欢失恋的结果。

  3. 稣酒量太好,从来不屑和别人比酒量。

  4. 稣是 00 后。

  5. 稣是很有原则的人,稣的原则就是:原则随时可以改进。

  6. 一劫,人间 43 亿 2 千万年,现在是宇宙的第四劫初期,名唤七鹰劫。这是稣的座右铭“天地玄黄,宇宙洪荒。度修七鹰劫,证悟神通”中“度修七鹰劫”的由来。

  7. 稣长期随地乱扔个性,就连撒泡尿都要排泄一定份量的个性,但还是很有个性。

  8. 稣最长的暗恋记录是八年。

  9. 稣是很理性,又很感性的人。

  10. 十几年前,稣发誓“努力赚钱,买宝马”,结果钱太难赚,改发誓“努力赚钱,买马”,后来发现买了马也不会骑来上班……只好再改为“努力写马,赚钱”,最后稣真的写了一个木马,流传很广。

答案

  1. 是。稣很贵,穷屌丝女哪养得起稣?

  2. 是。失恋磨心、减肥,传说失恋七次就能修炼好量子纠缠邪术,为宇宙和平而再恋。

  3. 否。您问稣酒量怎么样,稣指着大海的方向——稣酒量太差,宁愿跳海,也不敢喝。

  4. 否。这是正经问答!“稣是 00 后”这个梗说的是 00 后是中国完全正常的第一代,他们能正常的快乐,不理会嫉妒他们的老一代。

  5. 否。稣根本就没有原则,哪来这么多废话。

  6. 否。这么瞎掰您也信?“度修七鹰劫”是因为稣想塑造一个绝情的自我形象,所以用“七鹰”来代替“情”。

  7. 否。稣哪里有个性了?您才有个性嘞!从来不觉得自己很有个性,只是有点内向。

  8. 否。这暗恋的故事原来记在百度贴吧,结果吧被删了,后来在腾讯微博私信到女主,结果腾讯微博倒闭,私信被全部清空。所以不记得几年了,但肯定不止八年。

  9. 是。这很容易做到的,举个例子:地球绕着太阳转,因为地球深爱着太阳,我日!

  10. 否。写着玩的,把自己整半死,没放出去。

诗盗·天之道人

《#诗盗#·天之道人》:十年练技,八年练心,身负情商逆应用;三年潜龙,五年入档,心怀宇宙正无穷。

注解

改编自霹雳布袋戏人物“天踦爵”诗号:

三年寻龙,十年点穴,肩负青囊走南北;
三寸知息,十面洞心,掌握乾坤通天阙。

题目的断句:不是天之“道人”,而是“奉行天之道的人”的缩写。

诗盗·中年女子不如鸭

《#诗盗#·中年女子不如鸭》:一车两位富休假,三餐一线穷在加。闲mang人岂识忙xian中趣?中年女子不如鸭。

注解

  1. 一对土豪夫妻,每人一辆车,车位紧靠,车牌就差一位。最近快过年了,土豪妻子已经休假,所以土豪把车停在俩车位中间,即一车占两位。

  2. 这说的是别人……大过年的还在加班!

  3. 这些别人明明好惨啊!但他们觉得忙才有意思……

  4. 那些穷逼的中年女子真不如鸭,嘎!

八哥之神【5】

晴空万里,稣在特稣垃车顶上醒来,车里睡着一个妹纸!她醒来后,非要说这车是稣送她的,稣却只记得自己是个养狗的,这车……根本养不起!这妹纸,那就……更养不起了!

“你说是,就是吧!本来就不是稣的,送你又不吃亏。”,稣心想。然后研究一下,车是坏的,还好,不然不是要暴露自己不会用特稣垃的真相?

“你是……我们认识?”

“吴情,爱情的情。你走了 110 天,还以为你已经回到现实世界,没想到失忆回来了!”妹纸一脸忧郁和失望。

稣看着她的黑眼圈,脑海里闪过前女友李怡的脸,稣刚认识李怡时,也是同款的黑眼圈!便试探地问:“你失恋啦?”

“没有。”简单的回答,但意犹未尽,似乎强行咽下好多话。也罢,自己还在懵逼,管她那么多干嘛。

这里风景秀丽,像极了瑞士 Lungern。嗯哼?稣并没去过,是朋友圈里看到的。奇怪的是,村民大多住在汽车里,只有少量的木屋。他们看到稣,似乎还蛮尊重的,仿佛稣是有钱人。但稣根本没有印象,难道说 110 天前,稣真的来过?没事,反正他们看起来对稣挺友善,先逮个人来问问吧!

就是你,抱只狗的大妈,和撒狗粮的稣有缘。“你认得稣?”

“见过,你是这里的名人,好多人没见过你,也听说过你。”大妈挺热情地回答。

“那你偷偷地告诉稣,那个吴情是肿么肥事?”

“她不是你的小蜜吗?你上次走后,她跟了别人,但矛盾挺大的,后来翅膀硬点就分手了。”大妈偷偷地说,但稣觉得她的声音有点刺耳!什么!居然给稣戴绿帽?虽然稣不记得自己有过小蜜……但突然有了,又突然没了,还是有点莫名激动。大妈见稣有点躁动,赶紧安慰说:“小姑娘不容易,还不是你一走就是几个月!不要计较啦。”

这难道就是中彩票,又丢掉的感觉?继续了解,又发现不少情况:原来稣已婚。这还是吴情和别人说的……

稣找回吴情问:“稣结婚啦?你确定?稣记得自己单身呢!在魔性山上只有单身狗相伴……造谣!赤果果地造谣!”

“上次搭你顺风车,闲聊时,你说自己哄孩子睡觉的能力比家里的三个老婆加起来还厉害。”

纳尼?稣还有三个老婆,好吧,你说有就有!“但我们的关系,不是他们说的那样吧?小蜜?”

“当然不是,别听她们瞎说!”她有点不高兴,一个尴尬的表情后继续讲:“我们没啥关系,只是上次我想和你组队离开这里,你却一个人跑了。没事没事,忘记也好。”

这时,稣的手机响起,吴情惊讶地说:“都 110 天了还有电?”稣反问:“这里没有电吗?”

得到习惯性看弱智但很肯定的回答,稣马上意识到自己更可能是刚刚来到这里。如果真在此百日之久,iPhone 7 不可能还有电。来电号码是未知,一个女人的声音:“圣小开先生,我是刚刚接待你的记录员,现在有点信息要透露给你,请注意记住我的每句话!明白吗?”

“稣不叫圣小开啊!你打错了吧?”

“好吧,你现在叫钱学森,可以鸟吗?”对方有点不耐烦,但稣的疑惑并未解开,不宜轻举妄动,继续听她扯,“这里面的大部分人都是现实世界里的罪犯,全部洗掉记忆,回到他们还没犯罪前的状态,只有两个是科研志愿者,不属于此列,你是其一,另一名至今还没超脱过,你现在得帮她回来,不然时间再久,她会被同化。”

“我们两个?和其他人有啥区别?”稣问。

“你身处之地是意识监狱,其他人永远无法离开,在这里死亡后就真的死啦!而你们只要破解游戏规则,就能回到现实。我的话全部带到,暂别!”

“射精病,稣在这里受人尊重,回什么吃狗粮的现实?既来之则安之!先跟这个妹纸谈个恋爱再说。”稣的内心哈哈狞笑中。

诗盗·魔性山军犬养殖训练基地

《#诗盗#·魔性山军犬养殖训练基地》:一步夹蛋两步扯,八分前戏七秒射。中年男子不如狗,心向南辕道北辙。

注解

  1. 草地上的石板路,石板铺得太近,一步一块容易夹到蛋,一步两块又太大步,容易扯到蛋。

  2. 这说的是别人……

  3. 这些别人好惨啊!

  4. 事与愿违,人生常态。美食美景美色不常有,律法又无情,还是要合情合理合法地及时行乐,加了这“三合”——真难……

八哥之神【4】

稣是魔性山军犬养殖训练基地的一名训犬师,著作《狗粮的三十六种撒法和七十二种喂法》。

《诗盗·魔性山军犬养殖训练基地》
一步夹蛋两步扯,
八分前戏七秒射。
中年男子不如狗,
心向南辕道北辙。

2018 年 12 月 29 日 21 点多,突然有犬吠,稣在楼上看了一下,外面一男一女似乎走错路,听到狗叫声吓退了。这个时间点,冬天的晚上,不应该有人来此。本不想理会,但突然看到女人的鞋子滑了一下,男人迅速扶住女人,然后一路拽着手下山。稣平时就是专业撒狗粮的,没想到晚上居然被这对奇怪的男女喂狗粮……

披了件深色外套就下去观测他们。原来真是走错路,他们想上魔性山健身公园爬山。但是这么晚,除了有点吓人,可能还有什么乱七八糟的剧情吧!这么一想,稣差点笑出来!

一路跟着上山,他们只顾着聊天没注意到稣。从对话内容可以看出他们还不熟悉彼此。女人一直在诉苦,大概是上次恋爱如何如何失败,付出太多,却不被珍惜。男人则比较熟练地开导她,分析得头头是道的样子。女人恍然大悟,明白过去不少认识是错的,自己并没有很差劲,然后逐渐开怀,有了笑语。

这时候正好爬到半山腰一个庙,他们左拐去参观。稣则继续走,趁他们不注意抄到前面去。后来听到男人说他不信佛,只是在外面看看,不想进去拜。女人已经被治愈了一些,目的达到,说想下山。稣也就随之折返。

下山后,他们在光亮处,稣发现那个男人长得很像钱学森!这太不可思议了,稣以前上学时,经常看到钱学森的画像,今晚真是见鬼!

他们上了一辆特稣垃,车牌是“四个逼”……这特么是违法的吧!要不要报警?稣犹豫一下的时间,他们却在车震??哦,并没有,稣可能狗粮吃多产生幻觉!上山容易,下山难,腿抖导致以为车在震吧!

稣还在纳闷“钱学森”时,车启动了,果断抄起附近的共享单车追上去看看他们往哪走。

以前坐过一个同学的宝马三系,每次只有男生时,他都是一顿操作猛于虎。但只载妹纸时,都是开得像自行车。这特稣垃也是开得很慢,可能用自动驾驶解放双手,进行无可告人的操作……吧!

稣以 30KM/h 左右速度跟着,到了十字路口,突然出八哥了……这乐射单车居然没法刹车!他们已经停车,稣如果避开,就会冲向十字路口,可能被横向行驶的车撞成狗!于是稣果断撞特稣垃,飞出去前,大骂:“草泥马的共享单车!”但心里想的却是:“这车好像挺贵?估计要赔不少钱!”

醒来已经在枫林晚……

人与人之间的差异咋这么大捏?

只想说说差异本身,不想纠结谁对谁错,仅是惊讶差异的存在!

姜是驱寒的?

不久前,在前同事朋友圈看到她说拿姜来驱寒……稣差点就吓醒了!

稣一直以为姜和薄荷是同类,是清凉的,只有浓度太大,味觉系统手刺激,才会引起热辣感,它本身应该没有什么能量,所以是夏天降温用的。夏天时,稣常喝姜味苏打水,个人感觉真的可以降温,而且有句古话“冬吃萝卜夏吃姜”佐证!

台风天蔬菜会降价?

几年前聊过这话题,冒出几个人觉得会降价,理由是菜坏了……

然而实际都是涨价,因为各种成本都上升。

男孩从小就比女孩勇敢?

很多人这么认为,包括曾经的稣。

去幼儿园参观之后,稣发现大部分哭得很惨的都是男生……小男孩比同龄的小女孩更需要母爱。

女人比男人会哄小孩睡眯眯?

又想当然了吧……稣自己试过前也这样以为。

现实是,无论哄女孩,还是哄男孩,妈妈、老婆、丈母娘,加起来也没稣行。