小弟正在尝试写一个类似监控中心的应用。数据量说多不多,说少不少。每天 12W 条数据。数据库大小每天增加 20M.
有了数据自然要从各个维度去分析。从时间维度,机房维度,机器型号维度等等。如果我一次取出 12W 条数据,不说 mysql 在默认配置下查询费时 2s 以上,而在 ruby 中建立如此大的一个数组也要耗费近 10s. 更别说做后续更多的判断和统计逻辑。不敢想象如果我以后要分析一周,一个月的数据会演变成什么样的情况。
于是我冒出了一个 "是不是该试试 mongodb" 的想法,这回我正在通往啃 mongodb 文档的路上,顺便向各位前辈们请教,mongodb 是否能较为快速 (指性能) 的满足我的想法。谢谢啦。
#1 楼 @hello_little_yy 嗯..要不然也不发新手问题里了么。想不到怎么避免用 ruby 存这么大数组的问题。逻辑有点复杂,只用 sql 语句应该是很难实现了。所以在找一个在数据库层面就能快速筛选目标的方案..
#3 楼 @jimrokliu #4 楼 @doitian 我明白了,果然是我处理方法有问题。我应该在插入的时候就开始按照统计的维度收集规划数据。按照 @jimrokliu 的意见是用 redis 做。按照 @doitian 的说法就是如果用 mongodb 做 db 的话,它本身就很适合胜任前面 "redis" 的工作。
这样理解的可对?
如果是临时方案,可以用 mongodb 搞,前提是你熟悉类似 mysql 这样关系数据库的设计(否则会把 mongodb 当做避难所,然后在关系数据上掉进坑里)。
如果是希望做一个生命周期超过 1 年的东西,并且暂时不太着急,建议寻求相关工具团队的专业帮助,让他们直接给你需要的东西,详细情况可以上班时候打我手机
你的问题和数据库无关,而是分析数据的方法不对。
似乎主要的瓶颈是卡在 ruby 建立 ActiveRecord::Relation 数组里面了,花了好几分钟。这个有啥建议么
应该把分析算法推向数据,而不是把数据都拉出来再分析。