非常大的字段会对MySQL数据库产生负面影响吗?

时间:2012-06-25 01:48:55

标签: mysql database django

我目前正在使用Django构建一个网站,并希望托管用户生物样式页面,最多可达几KB。这些字段不一定需要搜索,但需要在查找用户名时提供服务。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

在mySql数据库中存储为TEXT将具有许多好处(包括但不限于“性能”)。

将文本存储在我能想到的外部文件中没有任何好处。

PS:

我有一个遗留的PHP / MySQL网络应用程序,它使用的是早于MySQL的自由文本搜索的旧版本。如果我无法将其移植到新服务器,我正在认真考虑将所有“注释”数据保存在外部文件中,这样我就可以对文本运行像“Lucene”这样的索引器。但这是规则的例外。在您的情况下,存储在数据库中几乎肯定是最佳选择。 IMHO ...

答案 2 :(得分: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性能。

  6. 现在当然2和5仅适用于您达到数据库服务器的性能限制; 3和4是相当特殊的情况;并且,通常可以通过拆分表或重写相关查询来解析1。所以大多数时候这些都不适用,从这个问题看起来它们也不适用于你的情况;但是,一般正确的建议“使用BLOB / TEXT”确实有例外,非常值得理解它们是什么。