Mongodb 3.0.0:减少带宽和磁盘存储

时间:2015-03-12 11:36:09

标签: java mongodb mongodb-java

情况:我正在做决定是否可以使用Mongodb作为我们的存储引擎,并且我被要求分析磁盘存储和带宽使用情况。特别是,我们应该每小时发送1TB的数据,因此如果没有来自客户端的压缩,它实际上是不可行的。可能相关(答案难以满足我的需要):MongoDB + wiredTiger + compression - is compression done on client or server?

此外,这个问题的灵感来自useCompression MySQL自{3.0}版本(可能恐龙还在那时),因此我觉得奇怪的是我找不到类似的MongoDB。

摘要:

  • 如何压缩客户端发送到服务器的数据量?
  • 是否可以使用标准Java driver
  • 对于服务器端的磁盘存储,我仍然需要尝试,但Mongodb v3附带了WiredTiger存储引擎,所以我想我只需要为我的收藏设置它。

到目前为止我做了什么。我创建了一个json文件,其中包含我们需要从客户端发送到服务器的数据的实际样本,文件大小约为320K。然后我使用了这个片段

URI uri = Library.class.getClassLoader().getResource("2437018803.json").toURI();
String search = Files.lines(Paths.get(uri)).collect(Collectors.joining("-"));        
Map object = mapper.readValue(search, HashMap.class);
try (MongoClient mongoClient = new MongoClient(new ServerAddress("localhost", 27017));) {
      MongoDatabase db = mongoClient.getDatabase("mydb");
      System.out.println(mongoClient.getMaxBsonObjectSize());
      MongoCollection<Document> collection = db.getCollection("test");
      List<Document> documents = new ArrayList<>();
      for (int i = 0; i < 10000; i++) {
          Document doc = new Document();
          doc.put("name", "MongoDB");
          doc.put("type", "database");
          doc.put("count", i);
          doc.put("info", object);
          documents.add(doc);
      }
      collection.insertMany(documents);
 }

在此代码段运行时,我正在使用iftop监控我的Mongo服务器,最后我读到了:

TX: cum: 20.2MB  peak: 208b 
RX:      3.34GB        208b
TOTAL:   3.36GB        416b

根据我的理解,我认为3.36GB的数据是通过网络发送的,这在某种程度上是兼容的(我写的是因为我真的不知道3.36GB如何在磁盘上变成5 - 怎么样?我错过了什么?)在客户端上完成db.test.stats(1024*1024)以检查磁盘存储信息:

> db.test.stats(1024*1024)
{
    "ns" : "mydb.test",
    "count" : 7752,
    "size" : 3875,
    "avgObjSize" : 524272,
    "numExtents" : 19,
    "storageSize" : 5049,
    "lastExtentSize" : 1315.140625,
    "paddingFactor" : 1,
    "paddingFactorNote" : "paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.",
    "userFlags" : 1,
    "capped" : false,
    "nindexes" : 1,
    "indexDetails" : {

    },
    "totalIndexSize" : 0,
    "indexSizes" : {
        "_id_" : 0
    },
    "ok" : 1
}

所以,从我开始的地方回来:我如何告诉我的客户以压缩方式发送数据,让服务器能够理解请求?有办法吗?如果需要,我不在乎更换司机,如果不符合我的需要,我不必坚持使用官方司机。

0 个答案:

没有答案