为什么使用MySQL而不是平面文件?

时间:2010-04-19 13:46:52

标签: mysql database flat-file

我和一位朋友正在讨论他是否应该使用MySQL或flatfile数据库作为他网站的后端。我告诉他要使用MySQL,因为它是结构化的,记录良好,并且是一致的。另一方面,他说他宁愿追求速度。读取文件比连接MySQL要快得多,这让我想知道他是否是对的。例如,为什么不为每个表创建一个文件夹,如下所示:users/ groups/ posts/,文件夹中的文件包含按ID(1,{{{ 1}},2)然后对数据使用如下格式:3

换句话说,MySQL比flatfiles有什么优势?

9 个答案:

答案 0 :(得分:11)

  

换句话说,MySQL比flatfiles有什么优势?

MySQL提供索引和连接(用于执行性能),事务(用于数据完整性)和SQL(用于开发性能)。

您的项目只涉及一个3行自给自足的文本文件,您不需要MySQL

答案 1 :(得分:10)

  

读取文件比连接MySQL要快得多,这让我想知道他是否是对的。

Hobcobbles。像mySQL这样的数据库也将其数据存储在文件中,但具有大量的优化功能,最明显的是它的索引功能,与读取(或写入)大型平面文件相比,可以实现巨大的性能提升。

在某些非常有限的情况下,平面文件可能更快,但数据库引擎使用了几代开发人员的经验,致力于使数据访问更快,更可靠。例如,当脚本的两个实例尝试将数据写入数据库时​​,只需考虑竞争条件和锁定。

如果使用的数据量超过CSV文件中的几行 - 或者在文件(例如Wiki的页面)中不易于管理 - 请使用数据库。它增加了一层复杂功能,但为您节省了很多麻烦。

考虑快速在平面文件上执行SELECT * FROM posts WHERE MONTH(post_date) = "2010-03-10" 以及从头开始编写实现该目标的必要条件。

答案 2 :(得分:2)

请问“flatfile数据库”是什么?平面文件是一个平面文件 - 就像这样。说它是一个平面文件数据库让你觉得它神奇地拥有数据库的一些功能 - 根据定义没有平面文件。

  

MySQL有什么优势   flatfiles?

在这里跳过MySQL - 你问的主要问题是“为什么要使用数据库”。

我建议你研究性能(sewarch操作 - 指数是有原因的)并查找“ACID条件”一词,以便对数据库的实际情况有一个甚至模糊的想法。

平面文件不会给你任何保证,几十年的开发人员一遍又一遍地解决了所有问题。

答案 3 :(得分:1)

还有安全问题。如果您没有正确保护平面文件,它们可以更容易暴露。特别是如果您要存储用户信息,则无法进入平面文件。

假设您的网站或应用程序垂直增长,平面文件也无法扩展,因为平面文件越大,读取时间就越长。

最后,使用平面文件时,已经很容易使用的数据库非常简单。在每个人都使用数据库时,它没有按照“正确的方式”做事,所以我认为相反:为什么使用平面文件而不是MySQL?在理解或同意您使用平面文件的决定之后是否还有其他人来维护您的应用程序?

答案 4 :(得分:1)

我们需要更多的背景信息。

如果您的朋友正在阅读完整页面(数据库中存储的广告“blob”),那么是的,使用MySql并没有多大帮助。如果他有粒度数据(包括,我不知道,博客文章,newsitems,带元数据的图像,订单详情),那么除非网站非常吝啬且非常静态,否则基于文件的方法很快就会变得太有限。

您建议的解决方案有两大缺点:

使用文件夹/文件名与在每个表上只有一个索引(在本例中为文件名)相同,因此搜索任何其他条件将需要很长时间。更不用说在一个目录中拥有大量文件会对操作系统造成负担。

除此之外,即使您使用散列密码作为URL的一部分,security-by-filename也存在一定的安全风险。

我过去做了一些基于文件系统的中型应用程序(由于管理不当,我们无法使用数据库)这很有趣,但是一旦你浏览了几百个文件就非常有限。即使数量很少,你也必须从一开始就开始耍技巧,以保证工作正常。

答案 5 :(得分:0)

此外,如果不将所有用户信息存储在Posts/文件夹中,您如何获得John Doe撰写的所有帖子(例如)?在SQL中,它只是一个连接的select语句。对于平面文件,您必须将信息存储在实际的帖子文件中,或者编写代码以执行连接和放大。自己进行搜索操作。

答案 6 :(得分:0)

举个例子:考虑到你有1,000,000个客户,有地址信息,你需要搜索和设置住在纽约的客户。如果您将每个客户存储在单独的文件中,则需要读取所有1,000,000个文件并查看客户是否属于该状态。如果您将所有记录存储在一个巨大的文件中 - 您需要读取整个文件并迭代以查找来自纽约的所有客户。

在这两种情况下你都松了。

对于像MySql这样的RDBMS - 您将使用所谓的“set”操作或SELECT语句,并添加索引,引擎可能只会读取比从NY查找所有客户所需的数据多10/20%的数据。 / p>

希望这有帮助

答案 7 :(得分:0)

数据冗余和缺乏原子性是平面文件数据库中的大问题,这些数据呈指数级地表示在查询中保持和引入延迟以及诸如更新/删除/插入异常等其他问题所需的数据越多。

具有规范化的关系数据模型有助于消除这些问题,通过确保原子性并且每个记录是唯一可识别的(第一范式),表中的每个字段在功能上依赖于主键(第二范式)和非关键字段不与表中的其他字段共享传递依赖关系(第三范式)。

关系数据模型绝不是实现它的唯一方式,也许甚至不是最好的,但它肯定会尝试解决查询延迟和平面文件中固有的异常问题。

答案 8 :(得分:0)

与flatfile相比,Mysql有一些优势, 文件结构对于查询来说很差,但是文件中的CRUD比mysql快,你可以使用mongo db这样的无sql数据库来获得更好的结构和更快的速度, sql和no-sql数据库之间有一些区别,但我认为最好使用no-sql db而不是flatfile,也要注意你是否在使用bigdata no-sql db肯定比sql更好..