关于MongoDB中的GridFsTemplate

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

GridFsTemplate

GridFsTemplate是MongDB的一种构建模式,桶模式,意思就是吧所有的文档放到一起,没有集合。
关于MongoDB中的GridFsTemplate_第1张图片
这种模式在处理物联网(IOT)、实时分析或通用时间序列数据时特别有效。通过将数据放在一起,我们可以更容易地将数据组织成特定的组,提高发现历史趋势或提供未来预测的能力,同时还能对存储进行优化。

应用场景

有一个Bosch的物联网实现可以成为时间序列数据在现实世界中体现价值的一个例子。他们将MongoDB和时间序列数据应用于一个汽车业的数据程序中。该应用程序从整个车辆的各种传感器中获取数据,从而提高车辆本身的诊断能力和部件性能。
其它一些例子还包括在银行的金融程序中使用这种模式将交易进行分组。

java实现文件的增删查

  1. 存储文件
 public String saveFile(MultipartFile file, String fileName) {
        DBObject metaData = new BasicDBObject();
        metaData.put("createdDate", new Date());
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
//            文件流:inputStream
//            fileName:文件的唯一标识id
//            file.getContentType():内容类型
//            metaData:元数据
            gridFsTemplate.store(inputStream, fileName, file.getContentType(), metaData);
        } catch (IOException e) {
            logger.error("mongDb上传原图错误");
        }
        return fileName;
    }
  1. 查询文件
//根据文件的唯一标识检索对应的文件
public GridFSFile getFile(String fileName) throws IOException {
        logger.info("Getting file.." + fileName);
        GridFSFile result = gridFsTemplate
                .findOne(new Query(Criteria.where("filename").is(fileName)));
        if (result == null) {
            return null;
        }
        return result;
    }
  1. 删除文件
//根据文件的唯一标识删除对应的文件
public void delete(String fileName) {
        gridFsTemplate.delete(new Query().addCriteria(Criteria.where("filename").is(fileName)));
    }

在GridFsTemplate类实现了GridFsOperations的接口,非常丰富,有需要的可以参照GridFsTemplate文档

总结

处理时间序列数据时,在MongoDB中使用桶模式是一个很好的选择。它减少了集合中的文档总数,提高了索引性能,并且通过预聚合简化了数据访问。

你可能感兴趣的:(数据库技术,后端技术)