可以看到,有些复杂,特别针对我这种UE4与Android都不熟的人,只有想别办法,首先我的需求并不复杂,只是在一个模型与现实重叠的空间利用Project Tango的Motion tracking功能行走,旋转等,简单来说,我现在的办公室环境,利用3D建模做一个和办公室一样的模型,长宽都要对上,这样利用Project Tango 的Tracking,我能只看屏幕也知道我在办公室的那个位置,前面是否有障碍物,就如HTV vive的那二个像个小音箱的东东来检测可活动区域一样。
这里顺便提一下GL_POLYGON,这是个特别的图元,因为它的顶点数是不确定的。它产生的临时小索引就可能不再小。但神奇的是,它不再需要OneIndexBufferPtr类型的临时索引,而只需一个几乎不占空间的ZeroIndexBufferPtr。
上面的场景是对于单表的事物管理做法的推荐:实际上这并没有用到事物管理,而是使用MyBatis批量操作数据的做法,目的是为了减少和数据库的交互次数。
现在有另外一种场景,我要对单库/多库的两张表(Student表、Teacher表)同时插入一条数据,要么全部成功,要么全部失败,该如何处理?此时明显就不可以使用MyBatis批量操作的方法了,要实现这个功能,可以使用Spring的事物管理。
前面文章有讲,Dao层中的方法更多的是一种对数据库的增删改查的原子性操作,而Service层中的方法相当于对这些原子性的操作做一个组合,这里要同时操作TeacherDao、StudentDao中的insert方法,因此建立一个SchoolService接口:
我们上一篇文章中也提到过reduce()等这样的操作也是聚合操作,那为什么还有累加器这个东西存在呢?因为RDD本身提供的同步机制粒度太粗,尤其在transformation操作中变量状态不能同步,而累加器可以对那些与RDD本身的范围和粒度不一样的值进行聚合,不过它是一个write-only的变量,无法读取这个值,只能在驱动程序中使用value方法来读取累加器的值。