gpt4 book ai didi

ruby-on-rails - rails : Storing binary files in database

转载 作者:行者123 更新时间:2023-12-04 01:20:38 25 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

2年前关闭。




Improve this question




使用 Rails,是否有理由将附件(可以是任何时间的文件)存储在文件系统而不是数据库中?数据库对我来说似乎更简单,无需担心文件系统路径、结构等,您只需查看 blob 字段即可。但是大多数人似乎都在使用文件系统,这让我猜测这样做肯定有一些好处,但我没有得到,或者使用数据库进行此类存储有一些缺点。 (在这种情况下,我使用的是 postgres)。

最佳答案

这是一个非常标准的设计问题,并没有真正的“一个真正的答案”。

我通常遵循的经验法则是“数据进入数据库,文件进入文件”。

要记住的一些注意事项:

  • 如果文件存储在数据库中,您将如何通过 http 提供它?请记住,您需要设置内容类型、文件名等。如果它是文件系统上的文件,Web 服务器会为您处理所有这些内容。非常快速和高效(甚至可能在内核空间中),不需要解释代码。
  • 文件通常很大。大型数据库当然是可行的,但它们速度慢且不方便备份等。为什么在不需要时让数据库变得庞大?
  • 很像2.,将文件复制到多台机器真的很容易。假设您正在运行一个集群,您可以定期将文件系统从您的主机同步到您的从机,并使用标准的静态 http 服务。显然数据库也可以聚类,只是不一定那么直观。
  • 在 3 的另一面,如果您已经对数据库进行了集群,那么必须另外处理集群文件是管理上的复杂性。我会说,这将是考虑将文件存储在数据库中的一个原因。
  • 数据库中的 Blob 数据通常是不透明的。您无法对其进行过滤、排序或分组。这降低了将其存储在数据库中的值(value)。
  • 另一方面,数据库理解并发。您可以使用事务隔离的标准模型来确保两个客户端不会尝试同时编辑同一个文件。这可能很好。并不是说您不能使用锁文件,但是现在您需要理解两件事而不是一件。
  • 可访问性。文件系统中的文件可以使用常规工具打开。 Vi、Photoshop、Word,无论您需要什么。这很方便。你将如何从 blob 字段中打开那个 word 文档?
  • 权限。文件系统有权限,它们在后面可能会很痛苦。相反,它们可能对您的应用程序有用。如果您利用 7,权限真的会咬您,因为它几乎可以保证您的 Web 服务器以与您的应用程序不同的权限运行。
  • 缓存(来自下面的莎拉梅)。这在客户端上面起到了 http 问题的作用(你会记得正确设置生命周期吗?)。在文件系统上的服务器端文件是一种非常容易理解和优化的访问模式。大型 blob 字段可能会或可能不会被您的数据库很好地优化,并且您几乎可以保证从数据库到 Web 服务器还有额外的网络旅行。

  • 简而言之,人们倾向于将文件系统用于文件,因为它们最支持类文件习语。不过,您没有理由必须这样做,而且文件系统正变得越来越像数据库,因此最终看到完全融合一点也不会让我感到惊讶。

    关于ruby-on-rails - rails : Storing binary files in database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/735147/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com