0

情景

我正在构建一个 Web 应用程序,可以在其中动态生成报告(基于从 SQL 数据库检索到的信息)。这些报告将包含图表,这些图表也可以即时生成。因为这些图表包含敏感信息,所以使用 3rd 方图表 API(即:Google Charts)是不可能的。

问题

我正在使用 PHP 的 GD 扩展来生成这些图表。这很慢。缓存是要走的路,但问题是有大量可能的图表;尽管我相信大多数要求的图表都是以前生成的。

部分解决方案

图表是使用数据和其他信息(大小、图表类型等)生成的。因为这些可以唯一标识一个图表,所以我根据这些信息给每个图表一个唯一的哈希并保存它。现在我可以计算一个新请求的图表的哈希值,看看我是否已经渲染了它。

问题在于发生碰撞。为了解决这个问题,我正在考虑将哈希和数据的序列化形式保存在 SQL 表中。然后,如果我有缓存命中,我仍然会比较数据本身。

我过度设计了这个?(这是一个 160 位哈希 - SHA1)
有没有更好的方法来处理这个?

4

3 回答 3

0

如果您的散列数据长度小于 160 位,很可能是安全的。否则,就像你说的,可能会发生冲突,需要比较数据。

于 2010-07-16T08:01:42.660 回答
0

看看我们在工作中使用的ChartDirector,它不依赖 GD 库,应该更快。

于 2010-07-16T08:05:27.320 回答
0

我正在使用 PHP 的 GD 扩展来生成这些图表。这很慢。

我怀疑它不是缓慢的 GD。最有可能的候选者是整理数据的处理(来自数据库?)。在这种情况下,您可能会从优化数据库架构/和/或使用预先合并的数据中获得显着的好处。

尽管您可能还考虑缓存查询输出,但除非您在其他地方使用相同的数据,否则缓存图形图像可能更简单。

问题在于发生碰撞。

过早的优化 - 它不会发生。但如果你真的必须,拆分你用来生成图形的元数据并将其存储在一个单独的文件中(再次通过相同的哈希索引) - 然后在运行时进行比较。如果你撞到了,我们会打架,请你喝一杯。

我建议看一下 jpgraph - 这是一款出色的软件,并且内置了缓存。

C。

于 2010-07-16T12:53:16.657 回答