【原创测试】MongoDB千万级插入数据测试(MMO在线游戏应用场合)

一、筹备

我们要做一次千万级的MONGODB测试,操作系统选用CentOS 5.5 64位版,基本模拟实际的使用环境,采用单机集群模型(测试单机多CPU情况下的实际效果)。

测试基准数据:

服务器配置:
Intel Xeon E5506 * 2 共8核
内存是8GB DDR3

应用程序:
编程语言:C++
编译器:GCC 4.4.5
BOOST版本:1.47
MONGODB版本:2.02

测试目的:
为测试在大量数据插入时的延迟以及寻找相应的解决方案。
目标应用场合:
无分区式MMOSLG(目标在线用户100万 ~ 300万)

二、测试效果

直接测试插入数据的行为,测试插入数据 10000000,总耗费时间:7.6分钟,平均每条插入时间0.0469秒。
最终资源所占硬盘大小 1.2GB,存放数据大小1.5GB,索引大小0.3GB

三、测试结果
测试中发现,如果每天拥有大量数据在整个游戏世界中插入时,在100万条数据时耗费时间均很少,当数量达到300万以上是耗时略大。
测试中在某次测试阶段同时开放读取数据,即同时读取数据以及写入数据,未发现因此而导致性能急剧下降,略微有所减缓。

四、相关解决方案
后来我采用异步的方式,使用一个线程池同步执行所有的插入以及读入行为,发现其效率明显提升,未因为MONGODB本身的性能而导致下降。
但线程数不可过多,最好为当前CPU数 / 2,最佳,如果超过此数字会导致MongoDB本身程序的性能下降。

时间: 2024-08-25 23:35:12

【原创测试】MongoDB千万级插入数据测试(MMO在线游戏应用场合)的相关文章

mongodb千万级写入怎么优化

从mysql数据库通过java程序导入单表1300w到mongodb,花了大概50分钟,前1000w条数据中每100w条大概要3分钟,之后的300多w条就差不多每100w条要5到6分钟,之后再从其他的mysql表里面导入数据就会越来越慢,请问可以从那些方面可以优化mongodb的写入操作?这是我记录的花费时间 可以确定的是如果只在mysql里面遍历读取这1300w条数据,花费时间是10分钟左右. 可以生成好文档数据,然后用mongoimport  导入, 速度超快! 加大内存,mongodb 的

在mysql数据库中制作千万级测试表

在mysql数据库中制作千万级测试表 前言: 最近准备深入的学一下mysql,包括各种引擎的特性.性能优化.分表分库等.为了方便测试性能.分表等工作,就需要先建立一张比较大的数据表.我这里准备先建一张千万记录用户表. 步骤: 1 创建数据表(MYISAM方式存储插入速度比innodb方式快很多)   数据表描述 数据量:1千万 字段类型: id :编号 uname:用户名 ucreatetime: 创建时间 age:年龄 CREATE TABLE usertb(    id serial,   

【转】JMeter学习(十九)JMeter测试MongoDB

JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码方式测试MongoDB性能. 第一种方法 1.编写Java代码,内容如下: package com.test.mongodb; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.UUID; import java.util.conc

在一个千万级的数据库查寻中,如何提高查询效率?

在一个千万级的数据库查寻中,如何提高查询效率? 1)数据库设计方面:  a.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. b.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0

JMeter学习(十九)JMeter测试MongoDB

JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码方式测试MongoDB性能. 第一种方法 1.编写Java代码,内容如下: package com.test.mongodb; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.UUID; import java.util.conc

【转】使用YCSB测试MongoDB的微分片性能

MongoDB的库级锁 MongoDB是目前最流行的NoSQL数据库,以其自然的文档型数据结构,灵活的数据模式以及简单易用的水平扩展能力而获得了很多开发人员的青睐. 但是金无足赤人无完人,MongoDB不是没有它的一些弱点,比如说它的库级锁就是人们经常抱怨的一个性能瓶颈.简单来说MongoDB的库级锁就是针对某一个数据库的所有写操作,必须在获得这个数据库仅有的一个互斥锁情况下才能进行.这个听上去很糟糕,但实际上由于一个写操作只是针对于内存数据更新的那一刹那保留锁,所以每个写锁的占用时间通常是在纳

Mysql千万级大表优化

Mysql的单张表的最大数据存储量尚没有定论,一般情况下mysql单表记录超过千万以后性能会变得很差.因此,总结一些相关的Mysql千万级大表的优化策略. 1.优化sql以及索引 1.1优化sql 1.有索引但未被用到的情况(不建议) (1)避免like的参数以通配符开头时 尽量避免Like的参数以通配符开头,否则数据库引擎会放弃使用索引而进行全表扫描. 以通配符开头的sql语句,例如:select * from t_credit_detail where Flistid like '%0'\G

千万级用户网站门户前端设计

对于千万级的注册用户的门户项目是前端这块是怎么去实现的,自己在平常的工作中总结了一些经验,也是在不断的挫折中,不断演练的,希望总结出来给大家参考下,和大家一起探讨,一起进步. 一.门户设计一般会遇到哪些难点 (一).首页打开时间太慢了 在开发一个门户到生产上线后,首页响应时间是检验门户整个系统架构以及开发的重要的一项指标,有时候我们发现在公司测试发现速度都挺快的,怎么到生产首页打开就慢了呢? (二).页面加载不流畅,总感觉看着不舒服 因为门户一般都是偏向于内容和图片类资源比较多,但是我们打开自己

MySQL 百万级分页优化(Mysql千万级快速分页)

以下分享一点我的经验 一般刚开始学SQL的时候,会这样写 : SELECT * FROM table ORDER BY id LIMIT 1000, 10; 但在数据达到百万级的时候,这样写会慢死 : SELECT * FROM table ORDER BY id LIMIT 1000000, 10; 也许耗费几十秒 网上很多优化的方法是这样的: SELECT * FROM table WHERE id >= (SELECT id FROM table LIMIT 1000000, 1) LIM