在处理一次线上问题时,需要遍历一张玩家信息表,看单个account是否存在多个entity。使用aid_playerid_dict建立aid到playerid的映射,遍历过程中,发现同一个aid会出现两(多)次,没有细看playerid,以为是一个account存在多个entity。仔细看log,发现两个player_id(_id)是一样的,也就是说,db.collection.find方式遍历集合时,一个doc会被遍历两次,另外,有的doc没有被遍历到。另外,发现有的entity没有遍历到。

  两张表都采用hash _id的方式分片,遍历数据库的时候,依然后其他程序访问、修改数据。

  使用find拿到表的cursor,然后遍历活跃的(有其他进程的读写操作)collection,会出现一些document不能遍历到,或者有的document会被遍历到两次。这是因为新插入的数据,会引起分片数据分配的变化。类似一个链表,遍历链表的过程中有其他操作往中间插入新的数据。由于无条件的find遍历,是batch式的返回数据,所以会出现重复遍历的情况。而未遍历到的,则可能是发生了分片数据迁移,由于document的大小变化。

  

最新文章

  1. Java注释@interface的用法【转】
  2. 屏蔽zencart logs文件夹下不断生成的日志文件
  3. μC/OS-Ⅲ系统的时间管理函数和定时器
  4. 欢迎你,phpWeChat 开发者
  5. Topcoder几例C++字符串应用
  6. [转]使用EasyRsa3为OpenVPN生成密码
  7. cocos2d-x之悦动的小球
  8. maven 一好用的仓库镜像
  9. Extjs Google的Suggest的自动提示 从后台取数据
  10. WPF 之 未捕获异常的处理
  11. iOS XMPP之常见错误一:(<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized/></failure>)
  12. 对XSD schema文件中elementFormDefault属性的理解
  13. 词典 (noi OpenJudge)
  14. cache和buffer
  15. vue+cordova 构建hybrid app
  16. 如何解决testng执行用例失败自动重跑问题
  17. Git 切换本地分支 切换远程分支
  18. Irrlicht 3D Engine 笔记系列 之 自己定义Animator
  19. Docker run命令参数整理
  20. PEM文件

热门文章

  1. 更改 centos yum 源
  2. 构建微软智能云:介绍新的Azure业务转型创新技术
  3. C# winfrom Datagridview表头样式和选中样式
  4. asp.net生成PDF文件(一)
  5. Json转Map
  6. Python学习---Django的新工程设置模板
  7. HTML IMG标签SRC为null
  8. 软件cs页面分辨率测试
  9. [DBSDFZOJ 多校联训] 就
  10. 深入剖析php执行原理(2):函数的编译