Geohash取临近区块的强化

geohash是常用来做地理位置查询,是LBS项目中常用的技术。详细原理就不细说了,可以参考如下链接:

源码:

一般来说,取当前坐标临近坐标常规做法是取当前坐标所在区块的周边一圈区块,即一个九宫格,能够得到充足的数据量,同时避免边界问题。但是实际项目使用过程当中发现除了边界问题,还有一个精度问题。当geohash位数多的情况下,精度高,区块面积小,那么范围内的坐标点就会比较少,甚至出现没有的情况,如果位数少,那么区块面积大,范围内坐标点过多,那么距离计算量就会比较大。在golang版本的源码中,提供了GetNeighbors方法,直接取到九宫格,但是在上述场景下就会比较鸡肋。于是扩展了一下,以类似水波扩散的方式取数据,将每一圈的区块全部取出来。

阅读剩余部分 -

MySQL_Binlog_Table_Filter

最近处理了多起起mysql被删表的事件,发现mysqlbinlog有点鸡肋,只能导出指定库,但是不能指定表,网上有操作用grep的A和B,但是实际上可能语句是带有换行的,这样一来grep出来的内容就是不全的,所以做了一个过滤的perl脚本,小范围测试了一下没什么问题,还是比较好用的,还支持同时导出多张表,并且可以指定是否保留droptruncate语句。缺陷就是要先用mysqlbinlog导出指定的库,如果导出不限制库并且指定的表在多个库中存在的话就要乱套了。

详见:sillydong/MySQL_Binlog_Table_Filter

阅读剩余部分 -

分享一个Android上封装好的视频播放类

最近刚好有在安卓上播放网络视频的一个需求,网上搜了一圈之后找到一个小demo,使用之后觉得作者想法不错,但是代码当中有点问题,会有IllegaleState报错。调整了一下,并且加了个支持几种状态变化的interface,在MediaPlayer状态的处理上多做了一些工作,旧的有问题的代码就不放出来了,看看没错的版本吧。可能有看官会觉得做interface来执行这些事件有些多余,视频播放当中很多执行不是立即生效的,有部分操作实际上是类似异步的,因此做这个还是有必要的,保证了MediaPlayer状态不冲突。另外,安卓支持什么格式,这个就支持什么格式,没有额外的解码功能。

阅读剩余部分 -

各种磁盘RAID简明介绍

磁盘阵列(RAID)是常用的提高服务器I/O性能的做法。通过将多块独立的物理磁盘组合起来形成一个磁盘组,一方面提高性能,另一方面做数据冗余,在单个磁盘发生问题的时候还有另外的镜像能够使用,避免宕机。组合方式有RAID0,RAID1,RAID2,RAID3,RAID4,RAID5,RAID6,RAID7,RAID0+1,RAID10等级别。下面对RAID0,RAID1,RAID5,RAID0+1简单介绍。

阅读剩余部分 -