请教下背单词应用 (NodeJS + MongoDB) 的性能优化方案

2014-03-18 20:35:16 +08:00
 vilic
之前因为一个学长的建议使用了 MongoDB, 开发起来的确是挺方便的, 但是现在看到后台统计的写入时间还是心有余悸. 后台我反反复复改了好几次方案, 主要的问题是一个用户可能有几千上万条单词学习记录, 每次登录的时候都会读取出所有记录, 放在内存里.

从数据库中读取几千条记录这个过程比较耗时. 目前学习记录数总共是 70 万. 今天看 log 发现其中一个用户有接近 6000 条记录了, 但是初始化花掉了一秒钟左右的时间. 这个时间是否可以接受? (现在用的是阿里云, 听说如果是 SSD 会棒很多?)

因为最近基础功能基本上开发完了, 想接下来一边完善一边准备连接 SNS (打卡), 怕万一用户涨得快服务器撑不住. 加上自己是做前端的, 这方面懂得很少, 希望有经验的同学给点建议. 谢过先!
4360 次点击
所在节点    程序员
15 条回复
icevil
2014-03-18 21:27:35 +08:00
为什么每次登录的时候要一次性读取全部的学习记录?
vilic
2014-03-18 21:42:38 +08:00
@icevil 主要是单词背诵的时候优先级计算稍微复杂, 不好估计说那些单词是今天或者短时间内会用到的, 所以只好全部拿出来, 先选出几个优先级对应的候选单词, 再在各个优先级中排序.
notcome
2014-03-19 06:55:58 +08:00
同样类型我用的是 Redis……
notcome
2014-03-19 06:57:10 +08:00
已经进入生产了哦我动作太慢……
EPr2hh6LADQWqRVH
2014-03-19 08:49:17 +08:00
反正你也是一次性都拿出来,要不就按人头每人的记录都融成一条或者几条,人多了之后做sharding
chenlong451
2014-03-19 09:18:08 +08:00
IOS下是obj-c开发的?
gkiwi
2014-03-19 09:47:59 +08:00
@vilic 我觉得可以适当做个分级沉淀,比如说这6000个词的用户,在计算一次后,根据是否需要再次取出分成4000,1000,500,300,200这样子的级别,第一次用户优先计算300,200的,然后再后台慢慢计算500和1000级别的,没晚上再统一更新下4000那组的数据,这样子可能会好些。
cdffh
2014-03-19 10:15:17 +08:00
早就叫你上Redis了 然后你那个winserver 的服务器是在卖萌吗..
vilic
2014-03-19 11:42:43 +08:00
@notcome 其实之前拖了很久了…
@avastms 之前有试过每个用户数据存在一条里,读取是快不少,但每次更新都有重写整个大数组开销有点大。不过可能我的做法不对,一会儿搜搜去。
@chenlong451 其实是web app,套了层壳子。
@gkiwi 嗯,确实有想过这个,不过逻辑上估计稍稍困难,但未来估计必须得弄的感觉。
谢过大家的回复!
chenlong451
2014-03-19 22:54:48 +08:00
颇想结识楼主。
vilic
2014-03-20 04:01:07 +08:00
@chenlong451 哈哈, 话说我都没提你怎知道...
towser
2014-03-22 19:23:43 +08:00
@vilic 提什么?
vilic
2014-03-23 15:14:24 +08:00
@towser 没提这个东西有 iOS 版囧.
towser
2014-03-24 00:13:46 +08:00
@vilic 我打开看了的,还顺带看了你的博客。
哦,这是我小号。方便加个QQ认识认识么?
vilic
2014-03-24 01:51:12 +08:00
@towser 囧, 要是不怎么说话的话加 QQ 还是没问题的... 闲聊就... email 给我下 qq 吧.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/104903

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX