MongoDB2.0.1 出现严重数据丢失问题

再插入1000W的数据,既然丢失100W多数据。太夸张了吧。
是我操作上的问题,还是其他原因。在网络中,也有一些人发生过数据严重丢失。
1、我的环境
系统 window 20003
内存 1G
硬盘 1T 5700转
2、打算采用自动分片架设海量存储数据。
JSON结构
id 建立索引
url 建立索引
插入1000W数据,花费5个小时左右。
测试结果
查询一条记录,在100毫秒左右。
但发现一个非常严重的问题。数据严重丢失。数据库中只有8 963 724条数据。其他数据呢?
不见了?
贴一下相关代码。
Mongo m = null;
	      try
	      {
	        //连接数据库(三种连接方式):
	        m = new Mongo("127.0.0.1", 25017);
	        //选择数据库,如果没有这个数据库的话,会自动建立
	       DB db = m.getDB("dnt_mongodb");
	      //列出所有数据库名,不过发现,如果数据库里面是没有数据的话,并不会被列出来
	       System.out.println("数据库列表:\n"+m.getDatabaseNames());
	       DBCollection collection = db.getCollection("posts1"); 
	       System.out.println("统计文档:" + collection.count());
	       BasicDBObject document = new BasicDBObject();
	       document.put("id", 1);
	       collection.createIndex(document);
	       document = new BasicDBObject();
	       document.put("url", 1);
	       collection.createIndex(document);
         for(int i = 1; i <= 10000000; i++){
      	   System.out.println(i);
      	 document = new BasicDBObject();
		       document.put("id", i);
	           document.put("url", "http://www.agrilink.cn/NewNongSou/GNZX/index2011.html?OK=" + i);
	           //将新建立的document保存到collection中去
	           collection.insert(document);
         }
         
         System.out.println("Done"); 
         
	      }
	      catch(Exception error)
	     {
	        error.printStackTrace();
	     } finally {
	    	 m.close();
	     }

数据库中数据结果
mongos> use dnt_mongodb
switched to db dnt_mongodb
mongos> db.posts1.stats()
{
        "sharded" : true,
        "flags" : 1,
        "ns" : "dnt_mongodb.posts1",
        "count" : 8963724,
        "numExtents" : 65,
        "size" : 932223312,
        "storageSize" : 1175728128,
        "totalIndexSize" : 1595456464,
        "indexSizes" : {
                "_id_" : 290926608,
                "id_1" : 250226480,
                "url_1" : 1054303376
        },
        "avgObjSize" : 103.99955554187076,
        "nindexes" : 3,
        "nchunks" : 42,
        "shards" : {
                "shard0000" : {
                        "ns" : "dnt_mongodb.posts1",
                        "count" : 1861097,
                        "size" : 193554088,
                        "avgObjSize" : 104,
                        "storageSize" : 272621568,
                        "numExtents" : 16,
                        "nindexes" : 3,
                        "lastExtentSize" : 51974144,
                        "paddingFactor" : 1,
                        "flags" : 1,
                        "totalIndexSize" : 398048560,
                        "indexSizes" : {
                                "_id_" : 60396112,
                                "id_1" : 51950304,
                                "url_1" : 285702144
                        },
                        "ok" : 1
                },
                "shard0001" : {
                        "ns" : "dnt_mongodb.posts1",
                        "count" : 1857613,
                        "size" : 193191752,
                        "avgObjSize" : 104,
                        "storageSize" : 272621568,
                        "numExtents" : 16,
                        "nindexes" : 3,
                        "lastExtentSize" : 51974144,
                        "paddingFactor" : 1,
                        "flags" : 1,
                        "totalIndexSize" : 282807840,
                        "indexSizes" : {
                                "_id_" : 60281648,
                                "id_1" : 51852192,
                                "url_1" : 170674000
                        },
                        "ok" : 1
                },
                "shard0002" : {
                        "ns" : "dnt_mongodb.posts1",
                        "count" : 1829738,
                        "size" : 190288768,
                        "avgObjSize" : 103.99782263908821,
                        "storageSize" : 220647424,
                        "numExtents" : 15,
                        "nindexes" : 3,
                        "lastExtentSize" : 43311104,
                        "paddingFactor" : 1,
                        "flags" : 1,
                        "totalIndexSize" : 402496304,
                        "indexSizes" : {
                                "_id_" : 59423168,
                                "id_1" : 51108176,
                                "url_1" : 291964960
                        },
                        "ok" : 1
                },
                "shard0003" : {
                        "ns" : "dnt_mongodb.posts1",
                        "count" : 3415276,
                        "size" : 355188704,
                        "avgObjSize" : 104,
                        "storageSize" : 409837568,
                        "numExtents" : 18,
                        "nindexes" : 3,
                        "lastExtentSize" : 74846208,
                        "paddingFactor" : 1,
                        "flags" : 1,
                        "totalIndexSize" : 512103760,
                        "indexSizes" : {
                                "_id_" : 110825680,
                                "id_1" : 95315808,
                                "url_1" : 305962272
                        },
                        "ok" : 1
                }
        },
        "ok" : 1
}
mongos>

具体的配置步骤
创建configs服务器
mongod --dbpath "c:\mongodb\data\configs"  --port 23017
创建mongos服务器 并指定依赖的配置服务器 (mongos依赖于配置服务器,mongos查询的分片信息都存储在configs中)
mongos  --port 25017  --configdb 127.0.0.1:23017
创建多个分片服务器 (负责数据存储)
mongod  --port 27017 --dbpath  "c:\mongodb\data\dbs\shard27017"

mongod  --port 27018 --dbpath  "d:\mongodb\data\dbs\shard27018"

mongod  --port 27019 --dbpath  "f:\mongodb\data\dbs\shard27019"

mongod  --port 27020 --dbpath  "e:\mongodb\data\dbs\shard27020"
连接mongos服务器添加shard27017|shard27018|shard27019|shard27020分片服务器到configs服务器中。
mongo localhost:25017/admin

db.runCommand( { addshard : "localhost:27017", allowLocal : 1} )

db.runCommand( { addshard : "localhost:27018", allowLocal : 1} )

db.runCommand( { addshard : "localhost:27019", allowLocal : 1} )

db.runCommand( { addshard : "localhost:27020", allowLocal : 1} )

创建相应数据库并设置其"可以sharding",对dnt_mongodb库启用分片功能
db.runCommand({"enablesharding":"dnt_mongodb"})
注意:需要分片的集合 的shard key必须是索引键, (我们也可以在mongos为分片foo集合创建索引)
db.runCommand( { shardcollection : "dnt_mongodb.posts1", key : {_id : 1}, unique: true } )   
至此自动分片就创建完成了,可以在mongos或configs服务器查询分片信息。
db.printShardingStatus()



今天,同事测试了1100W数据。没问题。一条数据都没有丢。先标记保留。有时间在测试一次。

2013-05-29 晚
硬件环境:
CPU 双核 硬盘:7200转 内存:2G
软件环境:
myeclipse mongodb2.5.jar mongodb2.4.3
测试规则(一):
没有采用分片,进行100W数据插入操作。字段有ID和URL。
测试结果:
没有出现数据丢失。


测试规则(二):
没有采用分片,进行1000W数据插入操作。字段有ID和URL。
测试结果:
mongodb关闭。写入I/O错误。

你可能感兴趣的:(mongodb)