将长字符串存储在数据库中是否很好?

时间:2009-09-17 12:12:59

标签: database performance string long-integer

我需要在数据库中存储长字符串。字符串可以是5或6个句子长。你认为这是一个很好的设计策略吗?或者我应该为该字符串存储一个id,然后与另一个表创建一个关系,该表包含存储该字符串的文件的位置。 你能不能给出两者的优点和缺点。

字符串已经过预处理并存储在数据库中。任何修改都会读取整个字符串并完全替换它。所以你可以假设字符串是不可分割的。

8 个答案:

答案 0 :(得分:11)

将字符串存储在数据库中应该没问题。如果存储文件指针,则意味着每次要读取字符串时都需要执行文件I / O.一些句子不是很长,如果需要,你总是可以使用longtext数据字段。显然你的数据库会有点大,因为你有文字,但没关系。它肯定是比存储文件更好的选择。

答案 1 :(得分:8)

你提到的字符串不长。

当你提到“长”字符串时,我想的是32kB及以上 - 有些句子<1kb - 今天什么都没有。

你的技巧,存储一个Id会使事情变慢,因为你必须进行间接访问。

我唯一推荐的,当需要最大性能时,你应该只选择你需要的那些列(省略SELECT *) - 所以在不需要时省略text列,因为从服务器传输字符串申请费用最多的时间。这是一个很好的实践,不要触摸不需要的列(特别是当它们可能包含大量数据时)。

答案 2 :(得分:4)

我创建一个单独的表的唯一原因是这些长字符串对于许多记录是否相同。否则它只是一个额外的复杂功能,不太可能提供任何回报。

答案 3 :(得分:3)

现代DBMS中没有五六个句子!将文本直接存储在数据库中。

(你提到的另一种技术 - 将ref存储到另一个表中,该表本身具有对包含文本的外部文件的引用 - 使用起来会更加麻烦并且性能更差。)

答案 4 :(得分:2)

答案实际上取决于您打算存储的字符串数量,以及您打算用来存储它的数据库。如果您不存储许多字符串,则可能需要考虑将它们存储在XML或资源文件中,并将其预先加载到应用程序中。如果你有很多字符串数据,那么在你需要的时候,你可能会更好地记忆读取字符串,而不是把字符串读入你最终没有使用的内存中。

答案 5 :(得分:2)

数据库本身在存储长字符串方面没有任何问题。一些限制适用(例如SQL Server上的8k记录大小限制),但即使这样,您也可以在数据库中存储任意长度的文本,因为所有正确的文本都支持BLOB / TEXT数据类型,几乎没有上限。

五到六句话并不长。如果它们属于一起并且意味着要作为一个整体进行检索和操作,您可以继续将它们存储在适当尺寸的CHAR数据类型字段中。

只有当您的应用程序/数据模型直接受益于此方法时,才会出现是否将它们分开并附加ID的问题,即实际上它们是分开的事物。在你的情况下,似乎没有理由这样做。

答案 6 :(得分:1)

每个人都提到了性能,但没有人提出存储指向OS文件指针的另一个主要原因是一个坏主意:备份和恢复。如果一切都在数据库中,那么我们有一个备份数据的机制和一个恢复机制。而对于操作系统上的文件,我们有两种不同的备份机制,可能是两种不同的粒度,并且恢复成为同步的噩梦。

在某些情况下,这种情况不适用,例如数据仓库,它们的交易频率非常低,因此可以在没有重做或事务日志的情况下生存。

答案 7 :(得分:0)

除特殊情况外,我会离开现场。

唯一的另一个选择是将字符串放入不同的表中(将实际的字符串放在那里)...将它们放在单独的文件中会导致性能下降。

相关问题