数据库
首页 > 数据库> > 读取远高于写入时将计算值存储在数据库中

读取远高于写入时将计算值存储在数据库中

作者:互联网

我发现自己面临一个难题,答案可能不在我的专业知识范围内.我希望有人能提供帮助.

我有一个优化的高效查询来获取表(和链接)数据,其实际内容并不重要.但是,每次读取时,都需要处理该数据以JSON格式显示数据.正如我们所讨论的典型示例,其中几百行可能有几十万个关联行,这需要时间.借助多线程和强大的CPU(i7 3960X),此处理大约为400ms-800%(100%CPU).我所了解的并不多,但是为什么要每次都进行处理呢?

在这个特定示例中,尽管我曾经读过的所有内容都表明没有这样做(据我了解),但我正在考虑将计算出的JSON存储在VARCHAR(MAX)列中以便快速阅读.

为什么?好了,每次写入(更改)数据都被读取了100次或更多,在我看来,考虑到这些数字,存储JSON以进行优化的检索并重新计算并在奇数次关联时更新它会更好.更改-可能会增加10到20毫秒的时间来写入更改,但会在很大程度上提高读取速度.

您对此的意见将不胜感激.

解决方法:

是的,出于性能原因存储冗余信息非常普遍.第一步是测量开销-听起来您已经完成了(尽管我也会问:您正在使用什么json序列化程序?您是否尝试过其他?)

但是从根本上讲,是可以的,只要情况允许就可以.举个例子:stackoverflow有一个类似的情况-输入的markdown处理成html相对昂贵.我们可以在每次读取时执行此操作,但是读取的次数要比写入的次数多得多,因此我们在写入时烹饪markdown,并存储html和源markdown-这只是一个简单的“数据输入,数据输出”练习对于大多数“显示”代码.

但是,这对于json来说是不常见的问题,因为json序列化有点简单,并且大多数序列化程序都执行许多元编程优化.因此,我的建议是在尝试此路线之前尝试使用其他序列化程序.

还要注意,渲染的json可能需要比TDS中原始源数据更多的网络带宽-因此,数据库服务器和应用程序服务器之间的数据传输可能会增加;另一件事要考虑.

标签:sql-server-2012,database-design,json,sql,c
来源: https://codeday.me/bug/20191123/2066053.html