【问题标题】:Handle Images and Video in C# EF 6 -> Recommended maximum file size在 C# EF 6 中处理图像和视频 -> 推荐的最大文件大小
【发布时间】:2017-11-16 09:28:22
【问题描述】:

在我们的业务应用程序中,我们处理图像和视频。我已经根据这个答案创建了实体框架模型:

https://stackoverflow.com/a/6241232/3850405

我知道这将导致 varbinary(MAX) 限制为大约 2 GB,因为 EF 不支持开箱即用的 FILESTREAM

https://stackoverflow.com/a/5723825/3850405

我找不到推荐最大文件大小是多少?我知道这可能属于基于意见的情况,但我希望给定的上下文允许它。对于图像,我想大约 5 mb 和 200 mb 的视频,并且仅在用户想要查看它们时才获取它们(名称将显示在前端)。

这是一个好的解决方案还是我应该重新考虑一下?即使默认不支持FILESTREAM,实现它是否有益?

当前型号:

public class Media
{
    [Key]
    public int Id { get; set; }

    public DateTime Created { get; set; }

    public DateTime Updated { get; set; }

    public virtual ICollection<Image> Images { get; set; }

    public virtual ICollection<Video> Videos { get; set; }
}

public class Image
{
    [Key]
    public int Id { get; set; }

    public DateTime Created { get; set; }

    public DateTime Updated { get; set; }

    public string Name { get; set; }

    public virtual byte[] Image { get; set; }

    public int MediaId { get; set; }

    public virtual Media Media { get; set; }
}

public class Video
{
    [Key]
    public int Id { get; set; }

    public DateTime Created { get; set; }

    public DateTime Updated { get; set; }

    public string Name { get; set; }

    public virtual byte[] Video { get; set; }

    public int MediaId { get; set; }

    public virtual Media Media { get; set; }
}

【问题讨论】:

  • 整个 .net 框架的最大内存大小为 2GB,所以如果您正在做任何接近 2GB 大小的事情,那么您将不得不设计一个缓冲系统来将您的数据分块为更小的部分,因此,您将保存到数据库中的是块而不是文件,并且由于文件可以拆分成多少块没有限制,因此文件大小没有限制
  • 块大小通常针对内存页面大小,即 4KB
  • EF 不支持开箱即用的 FILESTREAM 不,但是如果一个表有一个 filestream 列,EF 会对其进行读写,只是不是以优化的流方式通过SqlFileStream 对象。
  • 不要将图像和视频存储在数据库中,而是存储在文件系统中。在数据库中维护这些文件的路径。
  • @Jehof 我不同意。它们不应存储在常规表列中,而应存储在文件流列中。存储指向外部文件系统的链接是一场灾难。

标签: c# entity-framework entity-framework-6


【解决方案1】:

实际上并没有任何客观的方法来决定你的最大值应该是多少。

SQL 只提供数据所需的内容,因此,如果您已将 varbinary(max) 用作列数据类型,并且其中只有一个 200MB 的视频文件,那么该字段的容量并不重要2GB,因为它只使用了 200MB。

考虑到这一点,我建议无论如何都使用 varbinary(max),除非您确切地知道每个文件的大小。这样您就可以确保它有空间,并且您的数据不会被截断以适应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多