1、复合索引创建语法
db.collection.createIndex( { : , : , ... } )
同创建单键(列)索引一样,索引创建时需要指定每一个键索引的顺序
多个键直接用逗号分隔
索引创建语法可以参考:http://blog.csdn.net/leshami/article/details/53541978
2、复合索引的一些特性
复合索引可以支持要求匹配多个键的查询
复合索引每一个键的顺序非常重要,这将决定该索引在查询过程中能否被使用到
复合索引支持前导(缀)列索引查询
不能够创建基于哈希索引类型的复合索引
任意复合索引字段不能超过31个
在关注关系的业务场景中,经常会取消关注和关注,这个操作是很频繁的,每次关注和取消我都要相应的将库中的关系添加或删除,之前是做了删除之前先查询以及防止重复提交,后来测试阶段发现防止重复添加会使正常的关注和取关操作无法执行;然后我取消防止重复提交的话,在高并发情况下会出现重复的数据;之后考虑通过mongo的复合唯一索引来对这个去重在java 中给对应的实体类加上注解
@CompoundIndexes({
@CompoundIndex(name = "xx名字",def = "{'xx':1,'xx':1}",unique = true)
})
然后我进行了测试,发现连续同样的五条记录插进去,中间没有报任何错误,但是库中正好只有唯一一条,刚好符合我的需求;然后接着用并行流模拟高并发情况下,也并没有出现错误;我测试的是复合唯一索引,复合索引的话就另行测试吧。