Sql 服务器数据库中的性能损失 JSON

Performance loss JSON in Sql Server database

目前,我将 JSON 存储在我的数据库中作为 VARCHAR(max),其中包含一些转换。我们的一位技术人员要求存储原始 JSON 它是从中转换而来的。

我担心如果我添加另一个 JSON 列,它会膨胀页面大小并导致更慢的访问时间。另一方面,这个 table 不会很大(大约 100 行,每个 JSON 列占用 4-6 K 字节)并且每分钟可以访问多达 4 或 5 次.

我是一个无情地滥用我们技术的吝啬守门人,还是一个保持系统可扩展性的明智架构师?

另外,我对(相对)新的 filestream/BLOBs 类型很好奇。从我读过的内容来看,我觉得 BLOB 存储在某个单独的地方,这样关系查询根本不会减慢速度。将 varchar 转换为文件流会有帮助吗?

通常,BLOB 是首选存储的对象,平均而言,大于 1 MB。

我认为您应该善于将它们保存在同一个数据库中。 100 行对于数据库来说并不多。

另外,保留原件和转换后的用例是什么JSON。如果原始 JSON 不会用作正常处理的一部分,而只是需要保留以供参考,我建议保留一个单独的 table 并将原始 JSON 转储到那里作为参考钥匙并仅在需要时使用原件。

您的用例听起来没有太多需求。 4-6KB 和少于 100 甚至 1000 行就此而言仍然很轻。虽然我知道预期用例几乎永远不会成为实际用例。如果人们将 table 用于 JSON 字段以外的其他内容,您可能不希望他们撤回 JSON 因为潜在的大小和不必要的膨胀。

幸好 SQL 有一些其他不太复杂的选项可以帮助我们解决问题。 https://msdn.microsoft.com/en-us/library/ms173530(v=sql.100).aspx

我建议查看 Large Value Types out of Row 的 table 选项,因为它是未来兼容的,并且 text in row 选项已弃用。本质上,这些选项将那些大文本字段存储在主页之外,允许正确的数据存在于它需要存在的地方,而额外的东西有一个不同的家。