Sql 在数据库列-NVARCHAR(MAX)和FileStream中存储JSON?

Sql 在数据库列-NVARCHAR(MAX)和FileStream中存储JSON?,sql,json,sql-server,sqlfilestream,Sql,Json,Sql Server,Sqlfilestream,我有一个表,其中有几个标准字段,还有一个列中的JSON文档。我们使用SQL Server 2017存储所有内容,数据由使用Entity Framework 6的C#应用程序使用。表本身可能有成千上万个条目,这些条目(或者更确切地说,它们上面的JSON列)必须每天更新。我试图找出要使用哪种数据类型才能获得最佳性能 我读过: 目前,JSON文档以30-200KB的文件形式出现。有可能超过256 KB的屏障,但超过1 MB的概率目前非常低。这将指向NVARCHAR。此外,这里: 人们建议将JSON

我有一个表,其中有几个标准字段,还有一个列中的JSON文档。我们使用SQL Server 2017存储所有内容,数据由使用Entity Framework 6的C#应用程序使用。表本身可能有成千上万个条目,这些条目(或者更确切地说,它们上面的JSON列)必须每天更新。我试图找出要使用哪种数据类型才能获得最佳性能

我读过:

目前,JSON文档以30-200KB的文件形式出现。有可能超过256 KB的屏障,但超过1 MB的概率目前非常低。这将指向NVARCHAR。此外,这里:

人们建议将JSON存储为NVARCHAR(MAX)是一种方法

然而,有两件事让我担心:

  • 首先,是随着时间的推移而出现的碎片,写入程序太多(这是Filestream无论列大小如何都具有优势的领域之一)。我不确定这将如何影响性能
  • 其次,我不确定在数据库中存储如此多的文本数据是否不会因为大小的原因而降低速度?据我所知,FileStream的另一个优点是,无论磁盘上的文件大小如何,数据库大小成本都是非常恒定的,这有助于随着时间的推移保持性能。还是我错了

  • 考虑到我的用例,您会选择什么?

    这不仅是性能的问题,也是开发时间、知识和维护的问题。如果所有东西都已经在c#中使用实体框架,那么为什么要使用更复杂的东西呢?我的方法是使用开发人员最熟悉的解决方案,直到出现性能瓶颈,然后进行基准测试


    比较两个具有实际表大小的解决方案,可以让您真正了解是否值得进行任何调整。

    我们已经在几个单独的表中使用规范化SQL实现了这一点。这就是为什么我知道这个表将有数以万计的写操作——存储的数据必须每天重新生成。现在,我们有大约5000行需要重新生成,但它应该(慢慢地)随着平台的增长而增长。就我个人而言,我选择NVARCHAR(MAX)是因为开发时间和易于维护。但我只是想知道是否有人使用FileStream以类似的方式存储如此小的数据,并发现它更好。