【问题标题】:Why is file system storage faster than SQL databases为什么文件系统存储比 SQL 数据库快
【发布时间】:2012-06-04 17:04:41
【问题描述】:

扩展this thread - 我想知道为什么从文件系统中检索文件比从 MySQL 数据库中检索文件更快。如果要对这两者进行基准测试,看看哪一个会在 10 分钟内检索到最多的数据(多种类型的数据)——哪一个会胜出?

如果文件系统确实更快,那么为什么不将所有内容存储在文件系统中并用 csv 或 xml 替换数据库?

编辑 1:

我为alternate storage options for java找到了一个很好的资源

编辑 2:

我正在寻找一个 Java API/Jar,它具有 SQL 数据库服务器引擎(或至少其中一部分)的功能,它使用 XML 进行数据存储(最好)。如果您知道什么,请在下面发表评论。

【问题讨论】:

  • 您想知道还是为什么?你已经陈述了这两个问题,但它们是相互排斥的。如果你已经知道一个更快,你为什么要问哪个更快,如果你不知道,你为什么要问为什么?

标签: java mysql post filesystems storage


【解决方案1】:

在一天结束时,数据库确实只是将数据存储在文件系统中。除了原始数据之外,所有有用的东西让您决定使用数据库。

如果您可以使用 CSV 复制数据库系统的功能、可扩展性、稳健性、完整性等,并且 仍然 使其比关系数据库执行得更快,那么是的,我建议这样做你的方式。

不过你需要几年的时间才能到达那里。

当然,关系系统并不是存储数据的唯一方式。有面向对象的数据库系统(db4oInterSystems Cache)和基于文档的系统(RavenDB)。

性能还与您正在处理的数据的风​​格和数量以及您打算如何处理相关 - 我什至不会尝试讨论这个问题,它太开放了。

我也不会开始下面的讨论:如果内存真的比文件系统快,为什么不把所有东西都存储在内存中呢? :-)

这似乎也与我很久以前回答的另一个问题相似:

Is C# really slower than say C++?

基本上,事情并不总是只是为了性能。

【讨论】:

  • 感谢您的回答。这是完全有道理的。不过,我不明白的是,为什么有人继续制作 SQL 而不仅仅是制作不同的库(即 java jar)并使用文件系统。这样你就可以只使用你想用的东西,把剩下的删掉。这是提高性能和可扩展性的可靠方法。
  • @ThreaT 有人使用 SQL 是因为他们需要一个应用程序来管理数据并允许人们创建自己的数据存储。 SQL 是数据库的框架和运行时,其实际实现由消费者完成。有一点是,在应用程序进程中运行一个简单的库是不够的,而您真正需要的是数据库设备。
  • 如果它是为消费者制作的,那么为什么所有开发人员都使用它?你知道那里有任何文件系统 java api 吗?
  • @ThraT 开发人员是消费者。不,我不是,我不是 Java 开发人员。
  • @ThreaT 您正在混合不同的层:SQL 是一种非常抽象的查询和结构化数据的方法。从理论上讲,它不仅可以被开发人员使用,还可以被分析师、数据挖掘者使用。存储是一个不同的层——这就是为什么有那么多不同的数据库引擎都可以理解 SQL。对于单个数据点,仅使用文件系统会更快,但数据库为您提供了统一的方法来构建、优化和对您的数据进行复杂查询
【解决方案2】:

MySQL 使用文件系统与计算机上的其他所有文件系统相同。要检索单个数据或数据表,没有比直接从文件系统更快的方法了。 MySQL 只是在文件系统 pull 中增加了一点开销。

如果您需要进行一些智能选择、匹配某些行或过滤该数据,MySQL 将比大多数其他选项更快地完成这些。数据库服务器为您提供文件系统无法提供的计算和数据操作能力。

【讨论】:

  • 这似乎已经解决了.. 但是如果你想知道为什么.. 想象一下尝试存储一个电话簿,其中每个条目都有一个文件夹,一个文件用于名称,一个文件用于号码。这些数以百万计的文件存储在数据库的单个表(和单个文件)中。数据库还可以在 RAM 中执行搜索和操作,这对于基本文件系统来说要困难得多。总之,它是一种更简单、更强大的数据组织系统。
  • SQL如何在不扫描所有内容的情况下获取数据?如果有本地驱动程序,Java 库不能做类似的事情吗?
  • @ThreaT 数据库使用针对搜索优化的索引执行查找。它不会扫描所有数据(如果 DBA 做得很好的话)。是的,Java 库可以而且确实可以做同样的事情;有许多完全用java编写的数据库。
【解决方案3】:

当您拥有混合/结构化数据时,DBMS 是唯一的解决方案。例如。尝试将所有客户的姓名、姓氏和国家/地区存储到您的数据库中,但仅限于 1981 年出生并居住在罗马的客户。如果您将这些数据保存到文件系统上的文件中,如何在不扫描所有文件的情况下轻松获取所需数据?如何加入返回的数据?

DBMS 提供的远不止这些。 许多 DBMS 将数据存储到文件中。

这个抽象层将使您以一种非常容易、标准和结构化的方式检索数据。

【讨论】:

  • 其实所有的数据库都是以文件的形式存储数据的。实际上,所有存储的数据都在文件中。我不知道任何其他不使用文件的存储形式。
  • 大多数 DBMS 可以配置为直接在磁盘上保存数据,根本不使用文件系统。例如,他们可以使用原始设备或块设备直接绕过操作系统 VFS 层。文件系统本身不会将数据保存在文件中,而是保存在块中。通常,您可以将文件视为一堆数据块,其中包含一些关联的元数据和一些索引,以便更快地选择。
【解决方案4】:

不同之处在于所需数据的位置。

在文件系统中,定位所需数据意味着搜索所有现有数据,直到找到为止。

无论数据量如何,数据库都提供索引,几乎可以立即(大约 12 次比较)找到所需的数据。

我们想要的是一个索引文件系统——幸运的是,我们拥有它们。它们被称为数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2018-04-29
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多