加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 存储可以通过调用url呈现的二进制数据的理想位置

发布时间:2020-12-15 00:40:27 所属栏目:Java 来源:网络整理
导读:我正在寻找一个理想的(性能有效且可维护的)存储二进制数据的地方.在我的情况下,这些是图像.我必须做一些图像处理,缩放图像并存储在一个合适的位置,可以通过RESTful服务进行访问. 从我的研究到目前为止,我有几个选择,如: 像MongoDB,GridFS这样的NoSql解决方
我正在寻找一个理想的(性能有效且可维护的)存储二进制数据的地方.在我的情况下,这些是图像.我必须做一些图像处理,缩放图像并存储在一个合适的位置,可以通过RESTful服务进行访问.

从我的研究到目前为止,我有几个选择,如:

>像MongoDB,GridFS这样的NoSql解决方案
>将文件存储在目录层次结构中的文件系统中,然后使用Web服务器通过URL访问图像
> Apache Jackrabbit文档存储库
>存储在Memcache,Squid Proxy等缓存中

你想选择哪一个以及为什么会有用的想法或有更好的方法吗?

解决方法

刚开始使用GridFS完全按照您的描述进行操作.

根据我迄今为止的经验,GridFS的主要优点是它不需要单独的文件存储系统.我们的整个持久层已经放入Mongo,因此下一个合乎逻辑的步骤是将文件系统存储在那里.平面命名空间只是摇滚,允许您使用丰富的查询语言根据要附加到它们的任何元数据来获取文件.在我们的应用程序中,我们使用了一个嵌入所有所有权信息的’appdata’对象,确保

NoSQL文件存储,尤其是GridFS,需要考虑的另一件事是它将与其他数据一起进行分片和扩展.如果你已经将整个数据库键值存储放在mongo服务器中,那么最终如果你需要用更多的机器扩展服务器集群,你的文件系统就会随之增长.

它可以感觉到一个小“黑盒子”,因为二进制数据本身被分成块,这个前景吓坏了那些习惯于基于经典目录的文件系统.在RockMongo等管理程序的帮助下,这一点得到了缓解.

总而言之,在GridFS中存储图像就像插入文档一样简单,所有主要语言的大多数驱动程序都可以为您处理所有内容.在我们的环境中,我们在端点上进行了图像上传,并使用PIL执行调整大小.然后从另一个只输出数据的端点从mongo获取图像,并将其模仿为jpeg.

祝你好运!

编辑:

为了举例说明使用GridFS上传一个简单的文件,这里是PyMongo中最简单的方法,python库.

from pymongo import Connection
import gridfs

binary_data = 'Hello,world!'

db = Connection().test_db
fs = gridfs.GridFS(db)
#the filename kwarg sets the filename in the mongo doc,but you can pass anything in
#and make custom key-values too.
file_id = fs.put(binary_data,filename='helloworld.txt',anykey="foo")
output = fs.get(file_id).read()
print output 
>>>Hello,world!

如果您愿意,也可以查询自定义值,如果您希望查询基于与应用程序相关的自定义信息,这可能非常有用.

try:
  file = fs.get_last_version({'anykey':'foo'})
  return file.read()
catch gridfs.errors.NoFile:
  return  None

这些只是一些简单的例子,很多其他语言(PHP,Ruby等)的驱动程序都有同源词.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读