mongDB按序存储数据操作

iamyuqy 2016-08-28 07:58:37
我的程序中用到了一张百万级记录的表,该表结构如下:

matchPriority
entrustPrice
entrustTime
entrustNotify


该表每秒钟均会产生几条数据,每个几秒钟我都需要取出排名在前100的数据按序显示出现,现在我的做法是直接find方法来查找,代码如下:

mongoQueryFilter.setOrderby("matchPriority","desc");
mongoQueryFilter.setOrderby("entrustPrice","asc");
mongoQueryFilter.setOrderby("entrustTime","asc");
mongoQueryFilter.limit(0, 100);

List<ExEntrustId> list =mongoUtil.find(mongoQueryFilter);


通过上述这种做法,我可以取到我想要的数据,但是性能很差。有两个问题需要请教下各位大神:
1. mongDB中是否能否做到在存储时就是已经排序好的,比如对于这张表,直接按照第一个字段降序,第二个字段升序,第三个字段升序的方式去存储,这样取的话就无需在进行sort操作,而只取前100个就OK了?
2. 如果mongDB中没有提供类似的操作,请问还有没有其他的能够提升性能的思路,能够解决该问题?
...全文
426 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
howsun_zh 2016-09-06
  • 打赏
  • 举报
回复
1、使用联合索引:db.yourcollection.createIndex( { "matchPriority": -1, "entrustPrice": 1,"entrustTime":1 } ) 2、但是,楼主的场景是写比读频繁,复合索引降低了写性能,那么读操作就得不到充足的计算资源,使得读操作变慢。解决办法是使用主从结构,读写分离。 3、或者折中的办法是只建立matchPriority降序单字段索引,然后每取出一百条,在内存中用程序做两次另外字段排序,这样可以提高写性能,一定程度上让出计算资源提高读性能。
rucypli 2016-08-28
  • 打赏
  • 举报
回复
1 不能 那样的话插入更新性能就很差 2 建立你需要的排序结构的联合索引即可

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧