相关疑难解决方法(0)

如何在Mongodb中有效地存储和更新二进制数据?

我在文档中存储一个大的二进制数组.我希望不断向此数组添加字节,有时会更改现有字节的值.

我正在寻找一些$ append_bytes和$ replace_bytes类型的修饰符,但看起来我能做的最好就是$ push for arrays.看起来这可以通过执行搜索 - 写入类型操作来实现,如果我以某种方式访问​​磁盘上的底层bson,但我觉得在mongodb中无论如何都有这样做(并且可能是有充分理由的).

如果我只是查询这个二进制数组,编辑或添加它,然后通过重写整个字段来更新文档,这将是多么昂贵?每个二进制数组大约为1-2MB,并且每5分钟更新一次并且跨越1000个文档.更糟糕的是,没有简单的方法将它们(及时)传播出去,它们通常会在5分钟的时间间隔内彼此接近.有没有人对这将是多么灾难有好感?似乎它会有问题.

另一种方法是将此二进制数据作为单独的文件存储在磁盘上,实现线程池以有效地操作磁盘上的文件,并从我的mongodb文档中引用文件名.(我正在使用python和pymongo所以我在看pytables).如果可能的话,我宁愿避免这种情况.

我在这里可以忽略其他任何替代方案吗?

谢谢你的支持.

编辑

在为我的用例编写一些测试的一些工作之后,我决定为二进制数据对象使用单独的文件系统(特别是使用pytables或h5py的hdf5).除了这些二进制数据对象的持久性之外,我仍将使用mongo.通过这种方式,我可以将与追加和更新类型操作相关的性能与我的基本mongo性能分开.

其中一个mongo开发人员确实指出我可以使用点表示法和$ set设置内部数组元素(请参阅下面的注释中的ref),但目前没有办法原子地在数组中执行一系列集合.

此外 - 如果我在我的mongo文档中有1,000个2MB二进制数据字段并且我经常更新和增长它们(至少每5分钟一次) - 我的直觉告诉我mongo将需要管理很多磁盘上文件中的分配/增长问题 - 最终会导致性能问题.我宁愿将其加载到OS级别的单独文件系统来处理.

最后 - 我将使用numpy对我的数据进行操作和执行计算 - pytables和h5py模块允许numpy行为和商店之间的良好集成.

database mongodb

9
推荐指数
1
解决办法
9664
查看次数

MD5摘要恢复下载

我正在从http服务器下载文件,并且必须考虑到在下载期间的随机点,网络连接失败或计算机崩溃.如果发生这种情况,我会使用HTTP"Range:"标题开始恢复下载.

由于下载必须针对MD5哈希进行验证,因此我似乎无法在恢复后使用网络输入流来获取正确的哈希,因为java.security.MessageDigest似乎没有基本上说"从我之前下载的部分md5哈希开始更新当前的md5哈希".

我对md5的内部不太熟悉 - 这在理论上是否可行,是否有一个可以让我这样做的库?

从下载的文件计算md5哈希将是非常昂贵的性能.

java md5

5
推荐指数
1
解决办法
1013
查看次数

如何使用 MongoDB 或其他文档数据库来保存视频文件,以及添加到现有二进制文件和并行读/写的选项

我在视频服务器上工作,我想使用数据库来保存视频文件。由于我只需要存储带有元数据的简单视频文件,我尝试在 Java 中使用 MongoDB,通过其GridFS机制来存储视频文件及其元数据。

但是,我需要两个主要功能,而我无法使用 MongoDB 进行管理:

  1. 我希望能够添加到以前保存的视频中,因为保存视频可能是分块执行的。我不想删除到目前为止的二进制文件,只需在项目末尾附加字节即可。
  2. 我希望能够在写入时读取视频项目。“线程A”将更新视频项目,添加越来越多的字节,而“线程B”将从项目中读取,在写入/刷新后立即接收“线程A”写入的所有字节。

我尝试编写简单的代码来做到这一点,但失败了。似乎 MongoDB 不允许对二进制文件进行多线程访问(即使一个线程正在执行所有写入),我也找不到添加到二进制文件的方法 - Java GridFS API 只提供来自已经现有的 GridFSDBFile,我无法获得一个 OutputStream 来写入它。

  • 这是否可以通过 MongoDB 实现,如果可以,如何实现?
  • 如果没有,您是否知道任何其他可能允许这样做的数据库(最好不要太复杂,例如完整的关系数据库)?
  • 我最好使用 MongoDB 只保留视频文件的元数据,并手动处理从文件系统读取和写入二进制数据,这样我就可以自己实现上述要求吗?

谢谢,

database video document mongodb nosql

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

database ×2

mongodb ×2

document ×1

java ×1

md5 ×1

nosql ×1

video ×1