zoukankan      html  css  js  c++  java
  • MongoDB2.0.1 出现严重数据丢失问题

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

    数据库中数据结果
    Java代码  收藏代码
    1. mongos> use dnt_mongodb  
    2. switched to db dnt_mongodb  
    3. mongos> db.posts1.stats()  
    4. {  
    5.         "sharded" : true,  
    6.         "flags" : 1,  
    7.         "ns" : "dnt_mongodb.posts1",  
    8.         "count" : 8963724,  
    9.         "numExtents" : 65,  
    10.         "size" : 932223312,  
    11.         "storageSize" : 1175728128,  
    12.         "totalIndexSize" : 1595456464,  
    13.         "indexSizes" : {  
    14.                 "_id_" : 290926608,  
    15.                 "id_1" : 250226480,  
    16.                 "url_1" : 1054303376  
    17.         },  
    18.         "avgObjSize" : 103.99955554187076,  
    19.         "nindexes" : 3,  
    20.         "nchunks" : 42,  
    21.         "shards" : {  
    22.                 "shard0000" : {  
    23.                         "ns" : "dnt_mongodb.posts1",  
    24.                         "count" : 1861097,  
    25.                         "size" : 193554088,  
    26.                         "avgObjSize" : 104,  
    27.                         "storageSize" : 272621568,  
    28.                         "numExtents" : 16,  
    29.                         "nindexes" : 3,  
    30.                         "lastExtentSize" : 51974144,  
    31.                         "paddingFactor" : 1,  
    32.                         "flags" : 1,  
    33.                         "totalIndexSize" : 398048560,  
    34.                         "indexSizes" : {  
    35.                                 "_id_" : 60396112,  
    36.                                 "id_1" : 51950304,  
    37.                                 "url_1" : 285702144  
    38.                         },  
    39.                         "ok" : 1  
    40.                 },  
    41.                 "shard0001" : {  
    42.                         "ns" : "dnt_mongodb.posts1",  
    43.                         "count" : 1857613,  
    44.                         "size" : 193191752,  
    45.                         "avgObjSize" : 104,  
    46.                         "storageSize" : 272621568,  
    47.                         "numExtents" : 16,  
    48.                         "nindexes" : 3,  
    49.                         "lastExtentSize" : 51974144,  
    50.                         "paddingFactor" : 1,  
    51.                         "flags" : 1,  
    52.                         "totalIndexSize" : 282807840,  
    53.                         "indexSizes" : {  
    54.                                 "_id_" : 60281648,  
    55.                                 "id_1" : 51852192,  
    56.                                 "url_1" : 170674000  
    57.                         },  
    58.                         "ok" : 1  
    59.                 },  
    60.                 "shard0002" : {  
    61.                         "ns" : "dnt_mongodb.posts1",  
    62.                         "count" : 1829738,  
    63.                         "size" : 190288768,  
    64.                         "avgObjSize" : 103.99782263908821,  
    65.                         "storageSize" : 220647424,  
    66.                         "numExtents" : 15,  
    67.                         "nindexes" : 3,  
    68.                         "lastExtentSize" : 43311104,  
    69.                         "paddingFactor" : 1,  
    70.                         "flags" : 1,  
    71.                         "totalIndexSize" : 402496304,  
    72.                         "indexSizes" : {  
    73.                                 "_id_" : 59423168,  
    74.                                 "id_1" : 51108176,  
    75.                                 "url_1" : 291964960  
    76.                         },  
    77.                         "ok" : 1  
    78.                 },  
    79.                 "shard0003" : {  
    80.                         "ns" : "dnt_mongodb.posts1",  
    81.                         "count" : 3415276,  
    82.                         "size" : 355188704,  
    83.                         "avgObjSize" : 104,  
    84.                         "storageSize" : 409837568,  
    85.                         "numExtents" : 18,  
    86.                         "nindexes" : 3,  
    87.                         "lastExtentSize" : 74846208,  
    88.                         "paddingFactor" : 1,  
    89.                         "flags" : 1,  
    90.                         "totalIndexSize" : 512103760,  
    91.                         "indexSizes" : {  
    92.                                 "_id_" : 110825680,  
    93.                                 "id_1" : 95315808,  
    94.                                 "url_1" : 305962272  
    95.                         },  
    96.                         "ok" : 1  
    97.                 }  
    98.         },  
    99.         "ok" : 1  
    100. }  
    101. mongos>  

    具体的配置步骤
    Java代码  收藏代码
    1. 创建configs服务器  
    2. mongod --dbpath "c:\mongodb\data\configs"  --port 23017  
    3. 创建mongos服务器 并指定依赖的配置服务器 (mongos依赖于配置服务器,mongos查询的分片信息都存储在configs中)  
    4. mongos  --port 25017  --configdb 127.0.0.1:23017  
    5. 创建多个分片服务器 (负责数据存储)  
    6. mongod  --port 27017 --dbpath  "c:\mongodb\data\dbs\shard27017"  
    7.   
    8. mongod  --port 27018 --dbpath  "d:\mongodb\data\dbs\shard27018"  
    9.   
    10. mongod  --port 27019 --dbpath  "f:\mongodb\data\dbs\shard27019"  
    11.   
    12. mongod  --port 27020 --dbpath  "e:\mongodb\data\dbs\shard27020"  
    13. 连接mongos服务器添加shard27017|shard27018|shard27019|shard27020分片服务器到configs服务器中。  
    14. mongo localhost:25017/admin  
    15.   
    16. db.runCommand( { addshard : "localhost:27017", allowLocal : 1} )  
    17.   
    18. db.runCommand( { addshard : "localhost:27018", allowLocal : 1} )  
    19.   
    20. db.runCommand( { addshard : "localhost:27019", allowLocal : 1} )  
    21.   
    22. db.runCommand( { addshard : "localhost:27020", allowLocal : 1} )  
    23.   
    24. 创建相应数据库并设置其"可以sharding",对dnt_mongodb库启用分片功能  
    25. db.runCommand({"enablesharding":"dnt_mongodb"})  
    26. 注意:需要分片的集合 的shard key必须是索引键, (我们也可以在mongos为分片foo集合创建索引)  
    27. db.runCommand( { shardcollection : "dnt_mongodb.posts1", key : {_id : 1}, unique: true } )     
    28. 至此自动分片就创建完成了,可以在mongos或configs服务器查询分片信息。  
    29. db.printShardingStatus() 
  • 相关阅读:
    HTML有2种路径的写法:绝对路径和相对路径
    ZB本地设置
    java main函数
    java static 关键字
    03013_动态页面技术-JSP
    Oracle数据库的文件以及Oracle体系架构
    记录一次mybatis缓存和事务传播行为导致ut挂的排查过程
    rtmp规范1.0全面指南
    程序员小哥教你秋招拿大厂offer
    ubuntu配置samba解决linux的svn使用舒适问题
  • 原文地址:https://www.cnblogs.com/shihao/p/2315611.html
Copyright © 2011-2022 走看看