3

我发现自己面临一个难题,其答案可能超出了我的专业知识范围。我希望有人能帮忙。

我有一个优化且高效的查询来获取表(和链接)数据,其实际内容并不重要。但是,在每次读取时,都需要处理该数据以以 JSON 格式呈现数据。正如我们所说的典型示例,几百行可能有几十万关联行,这需要时间。借助多线程和强大的 CPU (i7 3960X),此处理时间约为 400 毫秒 - 100% CPU 时为 800 毫秒。我知道的不是很多,但为什么每次都首先处理它?

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

为什么?好吧,每次写入(更改)都会读取数据 100 次或更多,在我看来,考虑到这些数字,存储 JSON 以优化检索并在奇怪的情况下重新计算和更新关联会更好已更改 - 写入更改所需的时间可能会增加 10 到 20 毫秒,但会大大提高读取速度。

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

4

1 回答 1

3

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

但从根本上说,是的,没关系,当情况需要时。举个例子:stackoverflow有一个类似的场景——你输入的markdown处理成html是相对昂贵的。我们可以在每次读取时都这样做,但是我们的读取次数比写入次数多得多,因此我们在 write 处制作 markdown 并将html以及源 markdown 存储起来——这只是一个简单的“数据输入,数据输出”练习对于大多数“显示”代码。

但是,这对于 json 来说是一个常见问题是不寻常的,因为 json 序列化有点简单,并且大多数序列化程序都执行了许多元编程优化。因此,我建议在走这条路线之前尝试不同的序列化程序。

另请注意,呈现的 json 可能需要比 TDS 中的原始源数据更多的网络带宽——因此您在 db 服务器和应用程序服务器之间的数据传输可能会增加;另一件事要考虑。

于 2013-05-29T10:41:31.443 回答