标签:
我想配置一个权重池,有3个权重A,B,C,根据不同权重选取2个id
我原本的设计是
权重A:[id1,id2...]
权重B:[id1,id2...]
权重C:[id1,id2...]
权重的操作有$push, $pop,和取整个表的操作,这样如果频繁操作有可能导致所标
我一个同事提出了另一个方案:
{
{
uid:id1
weight:A
}
{
uid:id2
weight:B
}
......
}
只要把weight key加上索引,取的时候根据weight索引去取全部A的文档。
下面方面的优势如下:
直接用$set 就可以改变权重了,(用pop,push)pop某个值会遍历数组,数据量大了,效率不高,甚至有可能导致锁表。
weight加上索引后,取A权重的全部id的速度,比上面没加索引的快2/3(加了索引,是直接查找)。
标签:
原文地址:http://www.cnblogs.com/2wind/p/5633864.html