故事背景,天书世界,现在项目已经属于成熟维护期,是时候总结一下当时的想法

第一个问题,为什么使用mongodb?

  1. 数据库对于游戏项目本身的要求与传统业务系统差异较大,所以nosql的弱结构性对于我那是相当的有吸引力,
  2. c++代码里面夹杂着sql这种方式实在是有点丑
  3. 由于要实现“秒合”,那么就意味所有的数据必须放到一起,遍寻当时的所有的数据库,支持热分片也就mongodb,仅此一家,别无分店
  4. mongodb号称与传统的sql最为接近,你可以像使用sql一样的去用他

第二个要回答的问题,mongodb有什么让人纠结点?

  1. mongdb的库级锁,真是让人心伤,就是因为你需要用到大量的数据都需要分片,结果你告诉我我这是库级锁 !你是想让我一张表一个库吧?
  2. 连接数过多,就是不想自己做中件间,或者说是数据库访问层,才想到你的分片,你居然告诉我连接数过多,差不多到10000多连接就卡得跟鬼一样!
  3. mongdb客户端的不成熟,编译个c++版本,还得引入个巨大无比的boost,c版本各种混乱,现在可倒好,升级到3.x,直接连这些驱动都不能用了。
  4. 没有lua官方驱动,只好网上找开源实现,但毕竟不是官方,我猜连接有泄漏
  5. 号称跟传统mysql之类最为接近,结果索引的效果跟mysql差异非常大,特别是联合索引,表的设计模式也是相当的不同,否则的话够你受的
  6. 做了分片之后mongodb性能分析就非常难用了,没有办法用很简单的方式找到慢查询
  7. 有时候我们还是需要有一个自增id的,由于mongodb的实现方式也好,或者说分片机制也罢,总之,如果需要实现一个自增id对于mongodb是个难题
  8. 内存过大,硬盘空间过大

第三个问题,都这样了,有什么要说的吗?

  1. 出来混的,总是要还的!所有妄图解决业务问题的开源解决方案,最终还是解决不了问题,并带给你一堆苦恼。所以,这么大的数据量,自己实现中间件,自己基于业务进行分片,还是最好的解决方式,对于性能也有一个更清楚的认识,合并查询
  2. 如果仅仅是基于数据大集中,还是把数据大集中的数据库作为一个备份库更加合适一些,防止出现当总个游戏服的大数据集中依赖于这个点,导致当这个点出现问题时风险过份集中
  3. mongodb只要转变思路还是一个相当不错的数据库,nosql的优点一览无疑,对于游戏这种弱数据结构的场景是非常合适的,并且最好采用单机方案,不去做分片,很方便的慢查询非常快就找到了
  4. 尽量做好分表,或者说要尽量能分的表尽量分掉,如果可以用日期分表,然后,让新旧数据隔离,性能会非常出色
  5. 规划好索引,特别是联合索引,mongodb要直接命中联合索引性能才能比较好
  6. 如果能用3.x还是用3.x吧,至少库级锁的问题就解决了,2.x的话,尽量从业务上把库分掉
  7. 至于占用内存过大,及空间过大的问题,3.x的新引擎据说已经很好的处理了一下
  8. 如果采用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血泪般的经验教训的更多相关文章

  1. 新人入职100天,聊聊自己的经验&教训

    这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果你 打算去国外工作. 对Google的开发流程感 ...

  2. Apache Storm 的历史及经验教训——Nathan Marz【翻译】

    英文原文地址 中英文对照地址 History of Apache Storm and lessons learned --项目创建者 Nathan Marz Apache Storm 最近成为了ASF ...

  3. 七年IT生涯的经验教训

     七年IT生涯的经验教训[转]我在IT界也拼打了有好几年了,但是现在和别人比较起来不是很如意.从天分上来说,我在属于智商不低的人:从技术上说,几乎没有我拿不下的:从见解上看,我是很有点子看法的人. ...

  4. 从Apache Storm学到的经验教训 —— storm的由来(转)

    阅读目录 Storm来源 初探 再探 构建第一个版本 被Twitter收购 开源的Storm 发布之后 Storm的技术演进 构建开发者社区版 离开Twitter 提交到Apache Apache孵化 ...

  5. 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训

    [编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...

  6. 创建Android Apps的30个经验教训

    这个世界上有两种人-从经验教训中学习的人以及听从别人建议的人.这里是我一路走来学到的一些东西,分享给大家: 在添加任何第三方party之前,请三思:这真的是一个成熟的项目吗? 如果一个东西用户看不到, ...

  7. google开发新人入职100天,聊聊自己的经验&教训 个人对编程和开发的理解 技术发展路线

    新人入职100天,聊聊自己的经验&教训 这篇文章讲了什么? 如题,本屌入职100天之后的经验和教训,具体包含: 对开发的一点感悟. 对如何提问的一点见解. 对Google开发流程的吐槽. 如果 ...

  8. Week1 Team Homework #1 from Z.XML-总结学长经验教训

    谭传奇学长: 我们的弯路可能是,一开始没有从最基础的部分开始迭代开发,一开始就想的太远了一些,每一步开的有点太大了,所以可能有些东西最后就连不上,也没有能够按时完成.如果可以先做出一个能用的版本,然后 ...

  9. CQRS之旅——旅程8(后记:经验教训)

    旅程8:后记:经验教训 我们的地图有多好?我们走了多远?我们学到了什么?我们迷路了吗? "这片土地可能对那些愿意冒险的人有益."亨利.哈德逊 这一章总结了我们旅程中的发现.它强调了 ...

随机推荐

  1. django notes 二:URL dispatcher

    一般在 settings.py 中会有一个  ROOT_URLCONF ,请求到来时 django 会从 ROOT_URLCONF 指向的文件中查找  urlpatterns 变量配置的路由. url ...

  2. android中The connection to adb is down,问题和解决

    android中The connection to adb is down,问题和解决   自己总结的在android中常会出现的不好解决的问题和方法(其中第三个方法经过了四天的折磨.....哎) 1 ...

  3. C#中加粗label的字体

    1. 在C#的代码中想直接加粗label控件的字体, label1.Font.Bold = true;//发现系统会提示Font.Bold是只读属性 如果必须要加粗字体呢,方法如下: 2. 使用Fon ...

  4. 关于vue的常识问题及解决方法

    一.VSCode开发必备插件 1.Beautify:语法高亮: 2.Bracket Pair Colorizer :对括号对进行着色: 3.ESLint:ESLint插件,高亮提示: 4.HTML C ...

  5. online contest

    http://atcoder.jp/contest https://nanti.jisuanke.com/contest http://codeforces.com/ https://www.nowc ...

  6. PHP学习5——异常处理

    主要内容: PHP错误类型 异常的产生 错误日志 日志信息记录到操作系统日志 异常处理 扩展异常处理类 PHP错误类型 语法错误 执行时错误 逻辑错误 异常的产生 如果安装了xampp之后,在php. ...

  7. [android] post请求接口demo测试代码

    MainActivity.java package com.tsh.test; import java.io.InputStream; import java.io.OutputStream; imp ...

  8. centos7关于防火墙的操作

    1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld  停止: systemctl disab ...

  9. 互联网轻量级框架SSM-查缺补漏第六天【级联+延迟加载特辑】

    简言:本来这是昨天看的,但是因为想好好写一下[级联]这个东西,所以就看完之后今天来整理一下. 级联 1. 什么是级联 级联是一个数据库实体的概念.比如教师就需要存在学生与之对应,这样就有教师学生表,一 ...

  10. django基础一:web、wsgi、mvc、mtv

    一.web框架 web框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以快速开发特定的系统.他山之石,可以攻玉.python的所有web框架,都是对so ...