当读操作远高于写操作时,将计算值存储在数据库中

本文关键字:操作 存储 数据库 计算 高于写 | 更新日期: 2023-09-27 18:16:04

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

我有一个优化和有效的查询获取表(和链接)数据,其中的实际内容是不重要的。然而,在每次读取数据时,需要处理数据以JSON格式显示数据。在我们讨论的典型例子中,几百行可能有几十万行关联,这需要时间。使用多线程和强大的CPU (i7 3960X),在100% CPU的情况下,此处理大约为400ms - 800ms。我知道的不多,但为什么每次都要处理呢?

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

为什么?对于每一次写(更改),数据被读取100次或更多,在我看来,考虑到这些数字,存储JSON以优化检索,并在偶然的关联发生变化时重新计算和更新它会好得多,这可能会增加10到20毫秒的时间来写更改,但会通过一些大的因素改善读取。

当读操作远高于写操作时,将计算值存储在数据库中

是的,出于性能原因存储冗余信息是很常见的。第一步是测量开销——听起来你已经这么做了(尽管我还要问:你用的是什么json序列化器?)你试过别人吗?)

但基本上,是的这是可以的,当情况允许时。举个例子:stackoverflow有一个类似的场景——将你输入的markdown处理成html的成本相对较高。我们可以在每次读取时都这样做,但是我们的读取次数比写入次数要多得多,所以我们在写入时进行标记,并存储html 以及源标记-然后对于大多数"显示"代码来说,这只是一个简单的"数据输入,数据输出"练习。

对于json来说,这是一个常见的问题,这将是不寻常的,因为json序列化更简单一些,并且大多数序列化器执行了大量的元编程优化。因此,我建议在使用此方法之前尝试不同的序列化器。

还请注意,渲染json可能需要更多的网络带宽,原始源数据在TDS -所以你的数据传输之间的数据库服务器和应用服务器可能会增加;