【问题标题】:File storage library文件存储库
【发布时间】:2011-09-15 18:36:31
【问题描述】:

我想开发一个开源库,用于快速高效的文件存储(在一个大文件和索引文件下),如 NFileStorage。我为什么要这样做?
A. 在我的工作范围内,需要类似的东西。
B. 我们的 DBA 说在 DB 下存储文件效率不高。
C. 这对我来说是个好习惯。

我正在寻找一篇关于文件索引的好文章 你能推荐一个吗?

你的总体想法是什么?

【问题讨论】:

  • 文件是否应该存储在数据库中取决于应用程序和数据库。例如,SQL Server 2008 具有FILESTREAM 功能。
  • 在数据库中存储文件不是非黑即白的问题。就个人而言,我会将文件存储在 BLOB 中作为首选,除非有令人信服的理由不这样做。一些数据库甚至可以让您在数据库中“逻辑地”保存文件,同时仍然在数据库之外维护物理文件(Oracle“BFILE”)。关于在 Oracle BLOB 中存储文件的有趣讨论可以在 asktom.oracle.com/pls/asktom/… 看到

标签: c# file file-storage


【解决方案1】:

将文件存储在数据库中可能效率不高,但是像 SQL Server 这样的数据库具有 FileStreams 的概念,它实际上将文件存储在本地文件系统中,而不是将其放置在数据库文件本身中。

在我看来,这对于一个项目来说是个坏主意。

您将遇到与数据库完全相同的问题,将所有上传的文件存储在同一个文件中......这就是为什么它们中的一些已经从二进制/大型对象中移开,而是支持替代方法。

您将不得不处理的一些问题包括:

  1. 为支持文件分配额外的磁盘空间以存储新上传的文档。
  2. 从存储中永久删除“文件”并调整/压缩备份文件的大小。
  3. 多用户访问/锁定。
  4. 故障恢复。例如,当您在驱动器上遇到坏块时,它会占用您的备份文件。
  5. 事务支持。

第 1 项和第 2 项导致将“文件”写入数据存储所需的时间增加。网络文件系统已经支持第 3、4 和 5 项,因此您只是在重新创建轮子。

简而言之,您将不得不编写自己的文件系统或编写自己的 DBMS。对于 99% 的现实世界应用程序,我都不会认为这是“良好实践”。如果你的目标是为希捷工作,这可能是值得的。但即便如此,他们也可能会觉得你很有趣。

如果您真的对最有效的文件存储方法感兴趣,购买一个 SAN 阵列并将您的文件推送到其中,同时保留指向数据库中文件/位置的指针是非常简单的。易于备份,快速存储文件,比花费开发人员时间试图弄清楚如何编写自己的文件系统要便宜得多,而且未来的开发人员肯定 100% 支持和理解。

【讨论】:

    【解决方案2】:

    这种产品已经存在。您应该阅读有关 Mongo Db (http://www.mongodb.org/display/DOCS/Home)

    【讨论】:

    • Mongo 的 Documents 概念与将二进制文件放在一起并不完全相同......
    • 您在问题中的什么地方看到了关于推动二进制文件的内容?
    • Item B:“我们的 DBA 说在 DB 下存储文件效率不高。” DBA 只有一种情况会这样说:将二进制文件存储在数据库本身中。
    猜你喜欢
    • 2015-12-31
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2010-09-08
    • 2019-12-08
    相关资源
    最近更新 更多