再插入1000W的数据,既然丢失100W多数据。太夸张了吧。
是我操作上的问题,还是其他原因。在网络中,也有一些人发生过数据严重丢失。
1、我的环境
系统 window 20003
内存 1G
硬盘 1T 5700转
2、打算采用自动分片架设海量存储数据。
JSON结构
id 建立索引
url 建立索引
插入1000W数据,花费5个小时左右。
测试结果
查询一条记录,在100毫秒左右。
但发现一个非常严重的问题。数据严重丢失。数据库中只有8 963 724条数据。其他数据呢?
不见了?
贴一下相关代码。
数据库中数据结果
具体的配置步骤
是我操作上的问题,还是其他原因。在网络中,也有一些人发生过数据严重丢失。
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()