2012-06-25 40 views
2

我目前正在用Django构建一个网站,并且希望托管可能高达几KB的用户生物样式页面。这些字段不一定需要搜索,但需要在查找用户名时提供。非常大的字段对MySQL数据库有负面影响吗?

将它存储在数据库中有负面影响吗?如果我在数据库中使用带有链接的静态文本文件,我的服务器会运行得更好吗?

回答

0

您的问题的基本答案是“将数据存储在MySql中”(与外部文本文件相比):将数据存储在数据库中肯定是最佳方法。

“BLOB”可以是一个通用术语 - 在这种情况下,Oleksi绝对正确(我标记为+1,而不是down!)。

但你想要的MySQL特定类型的确是TEXT:

存储在你的MySQL数据库中的文本将有很多好处(包括但不限于“表演” )。

在我能想到的外部文件中存储文本没有任何优势。

PS:

我有一个使用,早自由文本在MySQL中搜索一个很老的版本遗留PHP/MySQL的Web应用程序。如果我无法将它移植到新服务器上,我会认真考虑将所有“笔记”数据保存在外部文件中,这样我就可以对文本运行索引器,如“Lucene”。但这是规则的例外。在你的情况下,存储在数据库中几乎肯定是最好的选择。恕我直言...

1

您可以将它们存储在数据库中,它们可能不会成为您的性能瓶颈。确保列类型设置为TEXT,MySQL将尽可能智能地处理该数据以避免性能问题。

+1

您将BLOB存储为TEXT而不是TEXT存储的原因是什么? BLOB通常不是用于二进制数据吗? – Ilion

+0

@Ilion是的,TEXT更合适。编辑。 – Oleksi

+0

您的'TEXT'链接仍然指向'BLOB'的文档 –

0

正如@Oleksi和@ paulsm4所讨论的,将数据存储在数据库中可能是有益的,因为他们讨论的所有原因。他们没有然而提到的原因,你可能不希望:

  1. 应在临时表查询优化过程中BLOB或TEXT列结束了,这个表将结束在磁盘上,即使是足够小,否则会在内存中。因此,您应该尽量避免选择BLOB或TEXT列,除非您知道需要它;应该避免select *(无论如何,这是一个很好的做法)。

  2. BLOB/TEXT列存储在数据库中。假设它是相对静态的内容,您可以通过将它们作为专用低开销httpd服务/缓存背后的静态文件来获得性能/可伸缩性/成本优势。

  3. 在BLOB代表媒体的情况下,将其外部存储在专用流媒体服务之后几乎总是更好。

  4. 如果内容发生更改,那么当数据存储在外部而不是数据库时,更容易合并版本控制。

  5. BLOB/TEXT列将与表的其余部分存储在同一台服务器上。 BLOB/TEXT访问通常对表/索引访问具有非常不同的读取模式。这意味着对BLOB/TEXT的访问会污染缓冲区缓存,影响数据库性能;并且表/索引访问会干扰顺序读取调度,影响BLOB/TEXT性能。

当然,2和5当然只适用于达到数据库服务器性能极限的情况; 3和4是比较特殊的情况;并且通常可以通过拆分表格或重写相关查询来解决1。所以大多数情况下这些都不适用,从这个问题上来看,它们听起来并不适用于你的案例;然而,通常正确的建议“使用BLOB/TEXT”确实有它的例外,它非常值得理解它们是什么。

相关问题