2

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

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

4

3 回答 3

1

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

于 2012-06-25T01:50:57.640 回答
0

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

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

但是你要的具体MySql类型确实是TEXT:

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

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

PS:

我有一个旧的 PHP/MySQL Web 应用程序,它使用一个非常旧的版本,该版本早于 MySQL 中的自由文本搜索。如果我不能将它移植到新服务器,我正在认真考虑将所有“笔记”数据保存在外部文件中,这样我就可以针对文本运行像“Lucene”这样的索引器。但这是规则的例外。几乎可以肯定,在您的情况下,存储在数据库中是最佳选择。恕我直言...

于 2012-06-25T01:56:34.537 回答
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”确实有其例外,理解它们是什么是非常值得的。

于 2012-06-25T03:43:54.823 回答