谈一谈NOSQL的应用,Redis/Mongo
1.心路历程
上年11月份来公司了,和另外一个同事一起,做了公司一个移动项目的微信公众号,然后为了推广微信公众号,策划那边需要我们做一些活动,包括抽奖,投票。最开始是没有用过redis的,公司因为考虑到参与人数的问题,给我们配了两台redis服务器,一台windows的(负责本地测试),一台linux的(负责线上版本),接下来说说途中遇到的坑,和最后的解决方法
2.坑之一,存List的瓶颈问题
linux版本redis服务器是16G的内存,因为第一次使用redis,并不知道去做压力测试,不知道瓶颈在哪,然后redis又被网上的人过度神话,以为只要内存不用完,就不会有瓶颈,取数据都是秒取,存数据都是秒存。上线两天,投票明细的key里的list集合超过10W(LIST里面存了投票时间,投票对象ID,主键ID,投票人ID),读取速度出现断崖式的跌落,从毫秒级变成3秒左右,数据量达到15W后,5秒左右。然后客服就来电话了,说用户说投票太慢了,点一下好久才提示成功,一直转。(他么的,我也是第一次,鬼知道redis会这样),我试着取了下另外一个key的数据(5W左右),发现还是毫秒级,证明key之间没有影响,所以当时的想到的解决方案就是,老子分key,差不多就是name_1,name_2,然后另外放个key存当前key的增量,到5W数据就分key,临时解决投票慢的问题。
总结一下,应该不是条数的问题,和List的长度有关,所以,不要把redis当关系型数据库使用,能分key就分key,然后做好瓶颈测试(现在必做的事之一)。
3.坑之二,redis的update功能
有没有大佬告诉我下,redis能不能Update..不是先取后改再删最后增加的那种。。可以直接用的那种。。。可能是我找的帮助类有问题,反正一直没找到可以直接update的方法。
因为这个问题,和redis本身不能建索引的问题,公司决定弄一台mongodb的服务器(16G)。
接下来说的是公司的另外一个需求,就是app要集成im功能,就是QQ聊天的那种,这就存在一个问题了,推送问题,这个太复杂,所以我们决定用第三方,我就不说名字了,免得有打广告的嫌疑。但是,另外一个问题出现了,好多功能他都收费,而且还不便宜,按我们的需求来开通收费业务,最低估计要每月花3000+,老大一拍板,说,就用它的推送功能和消息的发送功能,其他不用,这2个功能是免费的。(我的心情是何等的卧槽),因为公司产品是3端在跑(内部PC端,内部移动端,客户移动端),IM功能我负责提供接口给移动端,还有PCWEB端的聊天功能,所以考虑到用什么,Mongo弄进来用了一段时间(另外的同事弄了转盘抽奖活动,就是用的mongo),用redis肯定是不行的,因为要存聊天记录(妈的,你们自己说QQ是不是很不安全,啥都存着),存好友关系,存身份信息,所以不能直接用redis来搞,决定用Mongo,因为Mongo支持索引,问题来了,mongo如果用string类型做索引,效率也是不高的,不用的话,关系怎么办(各大用户表的主键都是guid),最后想到的解决方案是,用mongo的objectid做索引,redis用hash存objectid和主键Guid之间的对应关系,瓶颈测试一下,发现30W用户(只测试了这么多,瓶颈是多少我也不知道,有瓶颈了再说吧,内部员工只有7000多人,外部看下了下用户表,才20来W,活跃的才1W不到),存取没有任何延迟的感觉,通过!
4.总结
现在对redis的应用基本就是队列,缓存,做索引关系,mongo针对线上活动的数据存取,新功能开发一般也都用Mongo做数据库,后续同步到sqlserver。
大致都是这样,现在线上redis服务器变成了2台(负载)(新功能,自动打电话的功能),mongo变成了2台,做读写分离。总体来说,用到的项目都很稳定的在运行,暂时没有发现什么问题
谈一谈NOSQL的应用,Redis/Mongo的更多相关文章
- NOSQL的应用,Redis/Mongo
NOSQL的应用,Redis/Mongo 1.心路历程 上年11月份来公司了,和另外一个同事一起,做了公司一个移动项目的微信公众号,然后为了推广微信公众号,策划那边需要我们做一些活动,包括抽奖,投票. ...
- 谈一谈Java8的函数式编程(二) --Java8中的流
流与集合 众所周知,日常开发与操作中涉及到集合的操作相当频繁,而java中对于集合的操作又是相当麻烦.这里你可能就有疑问了,我感觉平常开发的时候操作集合时不麻烦呀?那下面我们从一个例子说起. 计 ...
- 谈一谈泛型(Generic)
谈一谈泛型 首先,泛型是C#2出现的.这也是C#2一个重要的新特性.泛型的好处之一就是在编译时执行更多的检查. 泛型类型和类型参数 泛型的两种形式:泛型类型( 包括类.接口.委托和结构 没有泛型枚 ...
- 从一张图开始,谈一谈.NET Core和前后端技术的演进之路
从一张图开始,谈一谈.NET Core和前后端技术的演进之路 邹溪源,李文强,来自长沙.NET技术社区 一张图 2019年3月10日,在长沙.NET 技术社区组织的技术沙龙<.NET Core和 ...
- 谈一谈Elasticsearch的集群部署
Elasticsearch天生就支持分布式部署,通过集群部署可以提高系统的可用性.本文重点谈一谈Elasticsearch的集群节点相关问题,搞清楚这些是进行Elasticsearch集群部署和拓 ...
- 谈一谈iOS事件的产生和传递
谈一谈iOS事件的产生和传递 1.事件的产生 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中. UIApplication会从事件队列中取出最前面的事件,并将事件 ...
- 谈一谈对MySQL InnoDB的认识及数据库事物处理的隔离级别
介绍: InnoDB引擎是MySQL数据库的一个重要的存储引擎,和其他存储引擎相比,InnoDB引擎的优点是支持兼容ACID的事务(类似于PostgreSQL),以及参数完整性(有外键)等.现在Inn ...
- 谈一谈APP版本号问题
如题:谈一谈APP版本号问题 为什么要谈这个问题,周五晚上11~12点,被微信点名,说APP有错,无效的版本号,商城无法下单.我正在准备收拾东西,周末回老家,结果看到这样问题,菊花一紧.我擦,我刚加的 ...
- 谈一谈深度学习之semantic Segmentation
上一次发博客已经是9月份的事了....这段时间公司的事实在是多,有写博客的时间都拿去看paper了..正好春节回来写点东西,也正好对这段时间做一个总结. 首先当然还是好好说点这段时间的主要工作:语义分 ...
- 蓝的成长记——追逐DBA(5):不谈技术谈业务,恼人的应用系统
***************************************声明*************************************** 个人在oracle路上的成长记录,当中 ...
随机推荐
- Javascript 的执行环境(execution context)和作用域(scope)及垃圾回收
执行环境有全局执行环境和函数执行环境之分,每次进入一个新执行环境,都会创建一个搜索变量和函数的作用域链.函数的局部环境不仅有权访问函数作用于中的变量,而且可以访问其外部环境,直到全局环境.全局执行环境 ...
- Jexus 5.8.2 正式发布为Asp.Net Core进入生产环境提供平台支持
Jexus 是一款运行于 Linux 平台,以支持 ASP.NET.PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器.最新版 5.8.2 已经发布,有如下更新: 1,现在大 ...
- BIOS中未启用虚拟化支持系列~~例如:因此无法安装Hyper-V
异常处理汇总-服务器系列:http://www.cnblogs.com/dunitian/p/4522983.html 一般都是启动一下CUP虚拟化就可以了 比如华硕的:
- HTML5 语义元素(一)页面结构
本篇主要介绍HTML5增加的语义元素中关于页面结构方面的,包含: <article>.<aside>.<figure>.<figcaption>.< ...
- bcp 命令实例
set sql_flow="select Id,',',ApplierName,',',FlowStatus,',',IsApproved,',',CreateTime from *** w ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
- 文档对象模型DOM通俗讲解
转自:http://www.jb51.net/article/42671.htm 在开始之前先说一点,DOM是非常容易理解的,但是大家说的太官方,让人很是难于理解,我们就用非常简单的语言翻译一遍.加深 ...
- DevOps对于企业IT的价值
其实从敏捷延展开的 DevOps 概念很早就已经被提出,不过由于配套的技术成熟度水平层次不齐, DevOps 的价值一直没有有效地发挥出来.现如今,随着容器技术的发展, DevOps 在企业中的实践难 ...
- Impress.js上手 - 抛开PPT、制作Web 3D幻灯片放映
前言: 如果你已经厌倦了使用PPT设置路径.设置时间.设置动画方式来制作动画特效.那么Impress.js将是你一个非常好的选择. 用它制作的PPT将更加直观.效果也是嗷嗷美观的. 当然,如果用它来装 ...
- postgresql 基本语法
postgresql数据库创建/修改/删除等写入类代码语法总结: 1,创建库 2,创建/删除表 2.1 创建表 create table myTableName 2.2 如果表不存在则创建表 crea ...