【问题标题】:Is there a better way to store huge text in mssql?有没有更好的方法在 mssql 中存储大量文本?
【发布时间】:2018-06-19 15:41:47
【问题描述】:

所以我一直在阅读几篇关于是否应该在 MSSQL 中存储大文本的文章,但是,我阅读的所有文章似乎都是固执己见,没有具体的答案。我正在尝试在 Asp.net 中构建一个 wiki,每个页面大约 10000-20000 个字符长,我将拥有 3000 多个这样的页面

我想知道将文本保留在数据库中是否可以?由于数据库膨胀,它会变慢吗?如果不是,我该怎么办?将它们保存在文本文件中并将地址保存在那里?

【问题讨论】:

  • 试试 nvarchar(max)。根据您的版本,这通常会进行优化。
  • 只有 60MB 的文本数据。它可能会驻留在 SQL 缓冲区高速缓存中。通过主键进行单例查找应该很快。
  • 嗨@PeterSmith,感谢您的回复。是的,我知道我可以使用 nvarchar(max) 但我想知道它是否合适?因为超过 3000 篇文章每篇都有 15000 个字符是一件大事!
  • 查看@DanGuzman 的评论
  • 如上,让 SQL 为你管理存储,这比将其存储在单独的文件中并存储文件路径要好得多(这本质上是 blob 存储在幕后所做的) .每行 40kb 并不算多(除非您尝试一次选择所有记录),并且使用 nvarchar 列意味着您可以在数据上创建全文索引,使搜索比循环文件快得多。

标签: asp.net sql-server tsql


【解决方案1】:

您可以简单地使用varchar(max)nvarchar(max) 数据类型来存储文本。如果需要,后者用于 Unicode 支持。

更好吗?这基本上取决于您将如何处理这些数据。而且您有很多选择,具体取决于您的 SQL Server 版本和硬件 - 这意味着您需要(必须)测试解决方案,以确保您使用的是最适合您的场景的技术。

如果您担心数据的大小,可以考虑压缩它的选项:

  • 用于在 SQL Server 2016 SP1 之前实现压缩的 SQL CLR 函数
  • 从 SQL Server 2016 SP1 开始提供COMPRESS 和解压缩内置函数

如果您要对文本执行搜索,您也应该检查full text search。或者您可以创建标签并通过它们进行搜索。

同样,如果某些数据在一段时间后不会被读取或修改,您可以将其存档。有不同的策略。

如果您使用 SQL Server 2017,您还可以检查 COLUMNSTORE 索引,因为支持 nvarchar(max)

【讨论】:

  • 所以可以肯定地说,将包含大量文本的所有 3000 页存储在一个表格中没有问题?
  • @Ali 当然,它是安全的。引擎总是它。当然,根据您的业务需求,您可能需要使用或不使用某些技术来压缩数据、存档或在其中搜索。
猜你喜欢
  • 2017-02-18
  • 1970-01-01
  • 2023-03-29
  • 2020-10-12
  • 2021-02-23
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多