在这一点上不存储大量的结构化数据作为BLOB有意义吗?

0

的问题

我们正在运行一个数据库的支持网络应用程序进行数据分析,目前基于C#.NET 与EntityFramework在服务器上,并主要HTML+Javascript框架对客户的侧面(网基础)。

我们的应用程序,定期测量接收X/Y数据点的批量大金额,即1e6或更多,上载的通过用户或接收由其他基础设施。

目前,我们有一个表中的数据库被称为 Valuesid, series_id as int; x, y, z as float. 这表 BULK INSERT 充满了时的数据的一个客户上载,以及相关元数据保存在一个 Series 表。 总db大小目前接近1TB99.99%是 Values 数据。

这种方法很简单,以实现但也有几个缺点,这使它复杂和缓慢的过时间:

  • 我们要插入的大块不过载IIS过程中其预处理它(目前200'000个数据点的每块)
  • IIS进程的存储期间的要求插入是巨大(>1500MB为200兆流量的数据)
  • 插入是过于缓慢(5百万个记录的是100MB,这需要>30秒插入甚至使用大容量插入)
  • 在插入的整个表被锁定,即只有一个用户可以插入在一个时间
  • 检索的数据也是相当缓慢,要求1e6记录有时需要>10秒
  • 删除系列与>1e6的记录,定期引起的超时上网的应用程序的一侧。

数据是从来没有部分地选择,因此我们真的不需要有在一个表中。 但它是'薄'显示之前发送给客户,即1e6记录是默认情况下,即在99%的情况下使用减少到2000年或10'000记录之前发送给客户。 这是缓存在的客户,但是,如果新客户的要求相同的设置,它再次处理。 该值表还有一个索引 series_id 这需要更多的磁盘空间的比该表本身。

我想知道是否它将是有意义的改变这种格式存储以BLOB储存在"价值观"与其自己的数据格式(CSV函或二元),以及-也许-额外的列有预处理过'减'的数据集显示,它可能推动客户无变化(例如。 关系图来描述软件所需的依赖). 因此新的 Values 表格式会是什么样

id, series_id, data(blob), reduced_data(blob)

会是只是一个 ValueSeries 项,不1e6或更多。 减少的数据集将是一次创建时上载的数据是收到后用于显示,当客户要求

我将失去部分选择的 values 通过身份证或X/Y值的,但是价值观是永远不会选择的基础上比其他任何东西 idseries_id 因此,这是 目前 不是一个限制。 这是我的问题:

  • 这是否有意义? 我期待建立和删除一个大BLOB数据集能总是显着快于建立和删除1,000,000个单一的记录。 真的吗?
  • 二进制BLOB或CSV/JSON/..BLOB? 最简单的办法BLOB存储当然是创建一个巨大的CSV函块和保存(可能压缩)在数据库。 一个自定义的二进制数据的格式将会更小,但它必须要转换叉之前发送给客户。

我有一种感觉的额外麻烦来的二进制数据格式可能是不值得的,它是更好地gzip CSV/JSON blob于创造一个二元格式。 真的吗?

怎么其它的缺点的斑点,我甚至可能不知道的吗? 尺寸限制似乎并不是一个问题, varbinary(MAX) 是足够的。 我不需要索引的价值观念的 内部 blob,只是在元数据(这是该系列中的表格)。

想法?

blob database-performance sql-server
2021-11-15 20:49:09
1

最好的答案

1

其中一个主要优点用于储存的文件在数据库 ACID (原子性、一致性、隔离性、耐久性)技术在DBs。 这使我们能够安全地将所有的数据分成不同的表的时候,我们工作的数据。 当你存储文件DB为BLOB你有优势时将文件复制到其他存储,因为BLOB快于作文件系统,可以很容易备份文件。 但是,如果你的文件大小的每一个记录是多10-50-100MB,不建议将文件存储在BLOB。 在这种情况下的持续时间插入记录的表也许采取10-15-30秒钟。 这不是很好,因为该交易最后这么久,及所有表在交易期间在这个意义上被阻止如你所知,长期阻止这些表格也会导致用户不能工作。 一个有趣的方式储存文件作为BLOB文件流BLOB技术支持,只有通过SQL服务器。 你可以得到更多的信息这种技术从

2021-11-18 21:34:15

谢谢你的指针。 我基插入多个区块的50MB的数据纳入一个实例表在我们的生产服务器和每个1-2秒这是可以接受的。 但是,文件流BLOB是一个很好的想法。
Jens

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................