区块链学习

OK then。

先写下自己的经历。

很久之前,久到大概五六年前,我就接触比特币了。那时候还算保持着对新事物的关注。然而当时毕竟也是没有什么积蓄(现在看来,那时候多少钱都算是啊),所以一心想着自己挖矿好了,比较极客,投入也比较少(这点再次证明,有时候一个人的本钱是对一个人的思维方式有很大影响的)。研究一段时间之后,发现没有自己数字的主力语言的,于是。。。。就放一边了。

差不多一个多月之前,从朋友圈发现了一个身边的(算是)玩币的人,当时已经赚的盆满钵满了,然后做了个小基金,然后又赚了很多了于是又准备直接搞私募(貌似之前主要发家的路子也是私募)。我看小密圈价格还可以(当时很便宜,相对而言,后来涨价了十倍不止),另外自己对这样的机会还是想要了解一下里面究竟是什么样的。

随后,就了解到,他是17年上半年接触到数字币,机缘巧合。然后他们几个朋友组织的小基金(这里不得不再提一下,他本人也是很有投资头脑的,个人的资金比较少的时候,就可以联络几个关系比较好的人报团组织出比较大的资金来进行投资,这样可投资的项目和空间立刻大了很多。这是我这样的技术人没能想到的)。当时有一个天上掉下来的机会,这个圈里的朋友介绍私募itc,他们圈里的人看了看并不觉得怎么好,所以决定不投,但是那个朋友自己投了一笔。后来的结果很明显,朋友没投太多,但是也财务自由了基本上。于是他自己如醍醐灌顶,开始大力介入数字币、区块链。六七八九月,二级市场btc和私募让自己赚的盆满钵满。

他个人秉承价值投资,在真正投资一个币之前,要好好做研究,首先要研究透比特币,区块链是什么东西,底层的原理和逻辑是什么,其他的币是怎么回事,有没有落地的项目,团队成员如何,背景资历怎么样,是否活跃,开源项目提交代码是否频繁,提交的内容是什么,有没有弄虚作假,项目是否真的有意义,如果是,那么就通过私募拿到额度或者。这样看下来其实是一个正常的投资理念,我也很认可。于是决定,如果他真正看好并推荐的项目,我就仔细信任的去投私募和二级市场,自己看到什么也跟他交流一下,听取一下意见什么的。同时自己也要开始研究区块链,让自己真正了解这是个什么东西,为什么这个东西出来之后,这么多人感兴趣,这么多人去投资,去研究,去推广。

实际的投资过程并不那么一帆风顺。初期的项目手里没有钱(现在还在想,如果我五六月没有买房子而是去屯了比特币,现在也好几套房子了 哈哈,然而现实从来没有如果),错过了两个项目。后来想到之前他使用的那种跟朋友一块做投资的方式,于是我也效仿一下,当然其实只是跟好朋友交流的时候,谈到自己想要投资,比较看好这块,朋友也是在我的描述之下,觉得也是不错,所以决定一起凑一点,然后去参与一些私募。

正如上面所说,现实并不是那么一帆风顺。

在mybatis中清空/全部删除表数据

有个定时任务一直以来直接跑的增量,基于跑了一段时间的定时任务的情况来看,发现有些情况没法通过增量来处理,比如被扫描表里有数据删除掉了;这种情况在我的定时任务里就没法定位出来对相应数据做处理。而在跑了定时任务之后如果再扫描结果表把已经被删除的数据筛选出来感觉是个很糙很糟糕的做法。

于是决定,在跑定时任务之前先清空整个结果表中的数据。思考之后有以下四种方式。

1、删除表重建表(drop table , create table )
虽然这种方式速度也很快,但是在业务工程里去做DDL操作感觉不太合适,而且操作相对复杂的多,放弃这种方案。

2、使用delete from table语句删除所有数据。
从逻辑上来说这个完全没有问题。但是delete语句虽然我们在执行的时候是清空所有数据,不需要加where条件,但是实际上数据库做的操作还是一条一条删除数据。在这个过程中数据库需要对每一次操作记录事务日志。数据量比较小的时候,这个操作也很快,当数据量比较大的时候,这个操作将会耗费比较长的时间。而且delete操作并不释放空间。

3、使用 delete table 语句删除所有数据。
这种方式也是删除表中所有数据,速度也快,唯一的一点,就是不释放空间。如果没有更好的方式,我将选择这种方式来实现我的设计。显然,有更好的方式。

4、使用truncate语法清空表。
查询过truncate语法和truncate与delete语法之间的区别就会知道,不同之处就在于,truncate会直接删掉相应的数据文件,这样不仅清空数据,而且释放了空间。另外就是,速度非常快。truncate的实现方式也是通过系统直接删除文件,这样的方式基本没有更快而且更节省时间的了。

经过思考,决定选择第四种。那么在mybatis中如何去执行truncate语句呢?查询资料,篇博客说使用@Select注解 ,然后执行的脚本字符串写truncate就可以,于是按照这个方式做。做完之后单元测试的时候发现,进入方法之后既没有执行结果,也没有执行错误的异常,很是尴尬啊。。。

后来想想,按说这里是一个对表(数据)的操作,按说不应该使用Select注解啊,这是个只读的。于是尝试,将注解改为使用@Update,果然成功!

因此得出结论:在mybatis中执行truncate语句需要按照如下方式:

@Update("TRUNCATE TABLE tmp_truncate_table")
void truncate();

ps.我这里使用的是mybatis的全局注解的方式,如果是使用配置文件,应该只需要在mapper文件中添加Update标签并将语句写到里面即可。

利用JAVA注解实现pv统计功能

利用JAVA注解实现pv统计功能用到的部分资料

 

http://www.tuicool.com/articles/JN73Ejb

http://www.jb51.net/article/67050.htm