Java 为什么文件系统存储比SQL数据库快

Java 为什么文件系统存储比SQL数据库快,java,mysql,post,filesystems,storage,Java,Mysql,Post,Filesystems,Storage,扩展—我只想知道为什么从文件系统检索文件比从MySQL数据库检索文件更快。如果其中一个对这两个进行基准测试,看看哪一个在10分钟内检索到最多的数据(多种类型的数据),那么哪一个会赢 如果文件系统确实更快,那么为什么不将所有内容存储在文件系统中,并用csv或xml替换数据库呢 编辑1: 我找到了一个很好的资源 编辑2: 我正在寻找一个JavaAPI/Jar,它具有SQL数据库服务器引擎(或者至少是其中的一部分)的功能,使用XML进行数据存储(最好是这样)。如果您知道一些事情,请在下面留下评论。在一

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

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

编辑1:

我找到了一个很好的资源

编辑2:


我正在寻找一个JavaAPI/Jar,它具有SQL数据库服务器引擎(或者至少是其中的一部分)的功能,使用XML进行数据存储(最好是这样)。如果您知道一些事情,请在下面留下评论。

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

如果您可以使用CSV复制数据库系统的功能、可伸缩性、健壮性、完整性等,并且仍然使其执行速度快于关系数据库,那么是的,我建议您这样做

不过,你要花上几年的时间才能到达那里

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

性能还与您正在使用的数据的样式和数量以及您打算使用它做什么有关-我甚至不打算尝试和讨论这一点,它太开放了

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

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


基本上,并不是所有的事情都是为了性能而做的。

MySQL使用的文件系统与计算机上的其他所有东西一样。要检索单个数据段或数据表,没有比直接从文件系统检索更快的方法。MySQL只会给文件系统带来一点点开销


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

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

DBMS为您提供的远不止这些。 许多数据库管理系统将数据存储到文件中


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

不同之处在于所需数据的定位方式

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

数据库提供了索引,无论数据量有多大,都可以几乎立即(在12次比较内)找到所需的数据


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

谢谢您的回答。这完全有道理。然而,我不明白的是,为什么有人继续开发SQL,而不仅仅是开发不同的库(比如JavaJAR)和使用文件系统。这样你就可以只使用你想用的东西,而把其余的都删掉。这是提高性能和可伸缩性的可靠方法。@有人之所以使用SQL,是因为他们需要一个应用程序来管理数据,并允许人们创建自己的数据存储。SQL是数据库的框架和运行时,其实际实现由使用者完成。在应用程序进程内部运行一个简单的库是不够的,而您真正需要的是一个数据库设备。如果它是为消费者设计的,那么为什么所有开发人员都使用它?你知道有什么文件系统JavaAPI吗?@ThreaT开发者是消费者。不,我不是Java开发人员。@你在混合不同的层:SQL是查询和构造数据的非常抽象的方法。理论上,它不仅可以被开发人员使用,还可以被分析师、数据挖掘者使用。。存储是一个不同的层-这就是为什么有那么多不同的数据库引擎都理解SQL。对于单个数据点,仅使用文件系统会更快,但数据库为您提供了统一的方法来对数据进行结构、优化和复杂查询您想知道是否这样做或为什么这样做吗?你已经陈述了这两个问题,但它们是相互排斥的。如果你已经知道一个更快,为什么你会问哪个更快,如果你不知道,为什么你会问为什么?这个问题似乎已经解决了。。但是如果你想知道原因。。想象一下,尝试存储一个电话簿,其中每个条目都有一个文件夹,一个文件代表姓名,一个文件代表号码。这数百万个文件存储在数据库的单个表(和单个文件)中。数据库还可以在RAM中执行搜索和操作,这在基本文件系统中要困难得多。总之,它是一个更简单、更强大的数据组织系统。SQL如何在不扫描所有内容的情况下获取数据?如果有本地驱动程序,java库不能做类似的事情吗?@ThreaT数据库使用为搜索而优化的索引执行查找。它不会扫描所有数据(如果DBA的工作做得很好)。是的,java库也可以做同样的事情;有许多数据库完全用java编写。实际上,所有数据库都将数据存储在文件中。实际上,所有存储的数据都在文件中。我不知道任何其他形式的存储不符合你的要求