前言
前段开发项目试就发现,一部分的代码实现存在着一些性能上的隐患。但当时忙于赶进度和由于卡发中的不稳定因素,想了许多解决方案也没有机会实施。最近,正好趁个机会进行一系列的改进。
我在团队开发中负责开发服务器端。所以在编写业务逻辑层时,常常遇到以下这样的业务逻辑:
1. 判断一个用户是否为在自己的好友列表中
2. 判断一条动态是否已被用户翻阅
3. 判断两个用户的标签的匹配度
4. .....等等
这些情况,我之前的方案是采用数据库来解决,为每条记录添加标记,需要查询时则遍历返回相应的集合。
但是随着用户量的不断增多、各个用户之间的关系不断地增加、以及用户使用软件的一系列行为中这些情况是非常频繁的,这样频繁遍历大量的记录的读操作会给数据库带来难以承受的压力。
那么如何需找一种更好的解决方案?
既能减少数据库需要遍历的记录数量且快速索引,又能用少量的内存表示大量的数据。
其实如果我们对这一类型的业务逻辑进行抽象,可以得到:本质上就是判断一个元素是否存在于集合中
所以我们可以采用位数组,通过数组的下标能快速地定位某个元素,用bit表示相应的内容能够节省大量的空间。
但是这样结构依旧不够完美,如果数据量相对较少,数组中会存在大量的无用数据