【发布时间】:2015-12-05 13:06:29
【问题描述】:
我是 MongoDb GridFs 的新手。我正在创建一个应用程序,我正在创建一个会议并上传与会议相关的文件。当我保存整条记录时,表格必须有会议ID自动生成的编号和我从mongodb收到的文档ID
return gridFsTemplate.store(inputStream, documentName, "image/jpeg", metaData).getId();
现在业务要求文件是异步上传的,这样大文件就没有页面了,用户不用等上传完成就可以提交页面了。问题是,除非整个上传完成,否则我不会获得文档 ID。但除非我有 id,否则我无法将会议 id 的数据保存在 mysql 表中。 请提出替代方案。
【问题讨论】:
-
您需要创建
@Async方法来异步上传您的图像见这里https://spring.io/guides/gs/async-method/。对于id,尝试将_id添加到您的元数据变量中。因此,您可以在 mongodb 中返回 id 并异步保存图像 -
所以你的意思是我将会议ID存储在文件的元数据变量中,然后从文件ID中检索它并保存在mysql中?
-
我的意思是:不是委托 MongoDB 为图像生成 ID,而是自己生成它。此 ID 将与图像内容 + 您在 MySQL 中的会议一起保存。您无需保存 ID 并再次检索它。顺便问一下,为什么你需要在 MongoDB 中存储你的图像和在 MySQL 中存储你的会议,你见过 MySQL BLOB 来存储二进制文件吗?
-
我需要保存图片。将图像保存在 mongodb 中而不是将其保存为 mysql blob 不是一个好主意吗?检索图像时 mongodb 的性能似乎优于 mysql blob。此外,如果我们谈论数千个图像,mysql 将消耗更多的磁盘空间。如果我错了,请纠正我。
-
基本上,如果您的数据不适合单实例/PC,请使用分布式数据库,例如 MongoDB。对于较少的数据,MySQL 比其他 NoSQL 数据库更快、更高效。因此,根据您的数据大小,选择存储在 MongoDB 或 MySQL 中或混合存储(保留在 MongoDB 中,使用 MySQL 进行事务、聚合等...)
标签: java spring mongodb spring-mvc spring-rest