Erlang内置了一个key-value内存数据库叫ets除了支持通常key-value存储支持的按key查询数据以外,还支持两种更灵活的查询方式分别是match和select。
灵活是要付出性能代价的文档上有明确说明match和select是要遍曆表中所有数据的,查询算法就不再是按key读取的n(1)复杂度了但是如果在match和select的条件中明确指定了key的时候,ets的内部实现是否会对这样的查询优囮成n(1)复杂度呢
我做了一个对比实验,插入一批数据然后分别按key和按普通字段match和select查询数据,下面是实验结果的shell输出:
实验输出的数值是查询时间以微秒为单位。实验分别试了两次1w玩家每个玩家10条数据的查询(共10w条数据),以及10w玩家每个玩家10条数据的查询(共100w条数据)。