我试图开始使用纯文本文件储存数据在服务器上,而不是把它们储存的所有大MySQL数据库。问题是,我可能会产生成千上万的文件夹和数以百计的数以千计的文件(如果我曾经有比例)。有什么问题这样做吗?它不会得到真正的缓慢?这是关于相同的性能使用一个数据库?

我的意思是:而不是具有一个数据库,该数据库中存储一个博客的表格,然后有一排中包含"作者"、"信息"和"日期"我会代替:一个文件夹具体职位,然后*.txt内的文件,文件夹于具有"作者"、"信息"和"日期"存储在他们。

有帮助吗?

解决方案

这是不是数据库读取非常慢(文件写入所有发生在大约相同的速度 - 你不能存储在内存中写入)。

数据库被优化并且意在处理这样大量的构造数据。文件系统都没有。这将是一个错误的做法复制数据库与文件系统。毕竟,你可以索引数据库列,但它很难不索引其他工具的文件系统。

数据库是专门为快速数据访问和检索。文件系统是专为数据存储。使用了合适的工具。在这种情况下,这是绝对的数据库。

这就是说,如果你想创建一个职位HTML文件,然后将这些区域设置存储在一个数据库,这样就可以轻松搞定他们,那么这绝对是一个很好的解决方案(一拉的Movable Type)。

但是,如果您存储在文件系统上这些东西,你怎么能找到你的最新帖子?大多数多产的作家?最有争议的作家?所有这些事情都是微不足道的一个数据库,很难用一个文件系统。与数据库坚持,你会很高兴你没有。

其他提示

这是真的取决于:

  • 是什么文件的尺寸
  • 什么耐久性的要求?
  • 更新你执行的?
  • 是什么文件系统?

这不是显而易见的,MySQL会更快:

我做了一次这样的比较 目,以便利用它作为会议的储存 CppCMS.有一个索引(键仅)和两个索引(主的关键和辅助timeout).

File System:   XFS     ext3 
-----------------------------
Writes/s:      322     20,000

Data Base \  Indexes:    Key Only   Key+Timeout
-----------------------------------------------
Berkeley DB              34,400      1,450
Sqlite No Sync            4,600      3,400
Sqlite Delayed Commit    20,800     11,700

正如你可以看到,简单的Ext3文件系统是速度更快或尽快Sqlite3为 储存 数据,因为它不会给你(D)酸。

另一方面...DB给你很多很多重要的特点你可能需要的,所以 我不会推荐使用的文件存储除非你真的需要它。

记住,数据库是 不总是 瓶颈的系统

忘了冗长的答复,这是最简单的原因,为什么存储数据明文的文件是一个糟糕的想法:

  1. 它附近-不可能查询。 你将如何排序的博客的日期?你有读取所有的文件和比较他们的日期,或保持自己的指标的文件(基本上,编写自己的数据库系统。)

  2. 这是一个噩梦到备份。 tar cjf 不,如果你尝试你可以结束了一个不一致的快照。

有可能是其他十几个好的理由不使用的文件,很难监测业绩,非常难以调试,靠近不可能恢复在错误的情况下,没有工具来处理,等等...

我觉得这里的关键是,会有您的数据没有索引。 SO检索任何东西比如说搜索会比索引数据库是非常可笑缓慢。此外,IO操作是昂贵的,数据库可以是(部分地)在存储器中,这使得数据可用的速度要快得多。

您真的不说为什么,你不会使用自己的数据库......但在情况下,你所描述我的任何一天肯定使用DB在文件夹中,有两个原因。首先,博客的场景似乎很简单,但它是很容易想象你,总有一天,愿与更多的功能,如搜索,更多的细节后,分类等展开。

我认为生长模型将更难在一个文件夹结构做比在DB中。

此外,数据库通常是快得多由于索引和存储器的高速缓存文件访问。

IIRC FUD论坛中使用的文件的存储速度的原因,它可以是一个快很多抢文件比来搜索DB索引,检索从DB中的数据并将其发送给用户。你的交易文件系统接口与DB和DB-Library接口。

然而,这并不意味着它会更快或更慢。我想你会发现写作是在文件系统中更快,但阅读的DB更快的一般性问题。如果像FUD论坛,你必须要表现出几个职位在一个相对不变的数据,然后将文件BASD方法可能是快了很多:比如,他们没有寻找每一个相关的帖子,他们坚持这一切在1个文本文件,一次显示它。如果你可以使用那种优化,那么你的基于文件的方法会奏效。

此外,邮件服务器在基于文件的方式工作了,了Maildir格式存储的每封电子邮件作为在目录中的文件,而不是在数据库中。

一件事我会说虽然,你会得到更好的存储一切都在1个文件,而不是3,文件系统是在阅读(和缓存)一个单一的文件比它是多的。所以,如果你想每封邮件存储为3个部分,它们都保存在一个文件中,读它得到任何部件,只是显示你想要显示的一个。

...然后你要搜索由作者的所有帖子,你会得到,而不是读简单的SQL查询的万个文件...

数据库是不是更快。想想吧:在结束他们的数据存储在文件系统。所以这个问题,如果一个数据库是快很大程度上取决于接入路径。

如果你只有一次的访问路径,其相关文件的结构文件系统可能的方式更快,然后一个数据库。只要确定你有一些缓存的可用文件系统。

当然你失去所有的好东西的一个数据库:-交易 -灵活的方式索引中的数据,因此访问的数据在一个灵活的方式合理速度快。-灵活的(虽然丑)查询语言 -高的恢复。

扩真的取决于文件系统的使用。据我所知大多数文件系统具有某些种类的上限数量的文件(完全或每个目录),虽然在新的这往往是非常高的。数百和成千上万的文件有一些目录的结构,以保持目录到一个合理的规模应该能够找到一个执行文件系统。

@Eric的评论:这取决于你需要什么。如果你唯一需要的内容的确切关文件的查询,并且可以确定的位置和名称的文件中确定的方式直接接入速度快于什么一个数据库,其中大致为:

  • 访问一大堆的索引条目,以便
  • 访问一堆表行(rdbms通常阅读块包含多个行),在了
  • 选择一个单一的行块。

如果你看它:你有索引和其他行在存储器,其使你的缓存效率低下,加速数据库应该从何而来?

数据库都是很好的一般的情况。但是如果你有一个特殊的情况下,几乎总是一个特殊的解决方案,更好地在某种意义上。

如果您是首选走与RDBMS,为什么不ü尝试其他开放源代码的键值或文件数据块(非关系DBS)..

乌尔张贴我的理解是不乌尔布莱恩遵循关系数据库的任何ACID属性..这将更好地适应其他键值DBS(MongoDB中,coutchdb或hyphertable),而不是你自己的文件系统实现..它会比现有的方法提供更好的性能..

注意:我不也是在这方面的专家..刚开始对MongoDB的工作,在类似情况下找到有用的。只是想万一分享ür不知道这些方法的

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top