使用MongoDB血泪般的经验教训
故事背景,天书世界,现在项目已经属于成熟维护期,是时候总结一下当时的想法
第一个问题,为什么使用mongodb?
- 数据库对于游戏项目本身的要求与传统业务系统差异较大,所以nosql的弱结构性对于我那是相当的有吸引力,
- c++代码里面夹杂着sql这种方式实在是有点丑
- 由于要实现“秒合”,那么就意味所有的数据必须放到一起,遍寻当时的所有的数据库,支持热分片也就mongodb,仅此一家,别无分店
- mongodb号称与传统的sql最为接近,你可以像使用sql一样的去用他
第二个要回答的问题,mongodb有什么让人纠结点?
- mongdb的库级锁,真是让人心伤,就是因为你需要用到大量的数据都需要分片,结果你告诉我我这是库级锁 !你是想让我一张表一个库吧?
- 连接数过多,就是不想自己做中件间,或者说是数据库访问层,才想到你的分片,你居然告诉我连接数过多,差不多到10000多连接就卡得跟鬼一样!
- mongdb客户端的不成熟,编译个c++版本,还得引入个巨大无比的boost,c版本各种混乱,现在可倒好,升级到3.x,直接连这些驱动都不能用了。
- 没有lua官方驱动,只好网上找开源实现,但毕竟不是官方,我猜连接有泄漏
- 号称跟传统mysql之类最为接近,结果索引的效果跟mysql差异非常大,特别是联合索引,表的设计模式也是相当的不同,否则的话够你受的
- 做了分片之后mongodb性能分析就非常难用了,没有办法用很简单的方式找到慢查询
- 有时候我们还是需要有一个自增id的,由于mongodb的实现方式也好,或者说分片机制也罢,总之,如果需要实现一个自增id对于mongodb是个难题
- 内存过大,硬盘空间过大
第三个问题,都这样了,有什么要说的吗?
- 出来混的,总是要还的!所有妄图解决业务问题的开源解决方案,最终还是解决不了问题,并带给你一堆苦恼。所以,这么大的数据量,自己实现中间件,自己基于业务进行分片,还是最好的解决方式,对于性能也有一个更清楚的认识,合并查询
- 如果仅仅是基于数据大集中,还是把数据大集中的数据库作为一个备份库更加合适一些,防止出现当总个游戏服的大数据集中依赖于这个点,导致当这个点出现问题时风险过份集中
- mongodb只要转变思路还是一个相当不错的数据库,nosql的优点一览无疑,对于游戏这种弱数据结构的场景是非常合适的,并且最好采用单机方案,不去做分片,很方便的慢查询非常快就找到了
- 尽量做好分表,或者说要尽量能分的表尽量分掉,如果可以用日期分表,然后,让新旧数据隔离,性能会非常出色
- 规划好索引,特别是联合索引,mongodb要直接命中联合索引性能才能比较好
- 如果能用3.x还是用3.x吧,至少库级锁的问题就解决了,2.x的话,尽量从业务上把库分掉
- 至于占用内存过大,及空间过大的问题,3.x的新引擎据说已经很好的处理了一下
- 如果采用3.x的话,意味着lua客户端的库就有很多不支持了。。因为验证方式的改变,那么可以采用我新实现的方案,由于是采用luajit的ffi实现的,所以,可能很多不能用,自己看着办吧,https://github.com/linbc/mongo-clua-driver
常规经验贴,推荐
http://www.cnblogs.com/cswuyg/p/4595799.html
http://www.cnblogs.com/cswuyg/p/4355948.html
使用MongoDB血泪般的经验教训的更多相关文章
- 新人入职100天,聊聊自己的经验&教训
这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果你 打算去国外工作. 对Google的开发流程感 ...
- Apache Storm 的历史及经验教训——Nathan Marz【翻译】
英文原文地址 中英文对照地址 History of Apache Storm and lessons learned --项目创建者 Nathan Marz Apache Storm 最近成为了ASF ...
- 七年IT生涯的经验教训
七年IT生涯的经验教训[转]我在IT界也拼打了有好几年了,但是现在和别人比较起来不是很如意.从天分上来说,我在属于智商不低的人:从技术上说,几乎没有我拿不下的:从见解上看,我是很有点子看法的人. ...
- 从Apache Storm学到的经验教训 —— storm的由来(转)
阅读目录 Storm来源 初探 再探 构建第一个版本 被Twitter收购 开源的Storm 发布之后 Storm的技术演进 构建开发者社区版 离开Twitter 提交到Apache Apache孵化 ...
- 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训
[编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...
- 创建Android Apps的30个经验教训
这个世界上有两种人-从经验教训中学习的人以及听从别人建议的人.这里是我一路走来学到的一些东西,分享给大家: 在添加任何第三方party之前,请三思:这真的是一个成熟的项目吗? 如果一个东西用户看不到, ...
- google开发新人入职100天,聊聊自己的经验&教训 个人对编程和开发的理解 技术发展路线
新人入职100天,聊聊自己的经验&教训 这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果 ...
- Week1 Team Homework #1 from Z.XML-总结学长经验教训
谭传奇学长: 我们的弯路可能是,一开始没有从最基础的部分开始迭代开发,一开始就想的太远了一些,每一步开的有点太大了,所以可能有些东西最后就连不上,也没有能够按时完成.如果可以先做出一个能用的版本,然后 ...
- CQRS之旅——旅程8(后记:经验教训)
旅程8:后记:经验教训 我们的地图有多好?我们走了多远?我们学到了什么?我们迷路了吗? "这片土地可能对那些愿意冒险的人有益."亨利.哈德逊 这一章总结了我们旅程中的发现.它强调了 ...
随机推荐
- JDBC(2)-使用statment接口实现增删改操作
1.Statement接口引入 作用:用于执行静态SQL语句并返回它所生成结果的对象. int executeUpdate(String sql) :执行给定SQL语句,该语句可能为insert.up ...
- 批量修改dos文件到unix
1. 安装dos2unix 2. 执行:find ./ -type f | xargs dos2unix
- Zato入门part2
Zato入门part1 参考1 前提:从part已经建立了集群.服务框架并成功的调用了服务.现在我们通过HTTP.ZeroMQ和JSON使用外部服务. 除非坚持手工调用,否则服务从来不知道什么确切的U ...
- uni-app 页面配置和跳转(一)转
今天看Dcloud官网更新了个uni-app,据说一套代码三端发布(Android,iOS,微信小程序),果断一试. uni.navigateTo(OBJECT) 保留当前页面,跳转到应用内的某个页面 ...
- whatwg-fetch
fetch 是什么 XMLHttpRequest的最新替代技术 fetch优点 接口更简单.简洁,更加语义化 基于promise,更加好的流程化控制,可以不断then把参数传递,外加 async/aw ...
- C++的中英文字符串表示(string,wstring)
在C++中字符串类的string的模板原型是basic_string template <class _Elem, class traits = char_traits<_Elem> ...
- 原创:微信小程序亲测体验,公众号入口曝光!
扫描即可体验知乐微信小程序,并且看到入口 你可以在这里看到相应的小程序:微信小程序商店 发现内有历史列表入口 真实小程序 搜索 操作栏 放置到桌面示意图必须搜索全称,才可以搜索到小程序 推荐给朋友,可 ...
- ssh登录实现
工程目录 配置文件详解 Spring的applicationContext.xml文件 <span ><?xml version="1.0" encoding=& ...
- [PHP] Oauth授权和本地加密
1.Oauth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方 关键字:appKey appSecre ...
- 部署基于python语言的WEB发布环境
一.部署说明 1.python语言介绍 python简介 2.实验环境 实验机器:Vmware虚拟机 8核10G 网卡:桥接模式 系统:centos7.5 防火墙:关闭 Selinux:关闭 网段:1 ...