方案

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

问题

我正在使用PHP的GD扩展来生成这些图表。这很慢。缓存是要走的方式,但问题是有大量可能的图表;虽然我相信所要求的大部分图表将是之前生成的图表。

部分解决方案

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

此问题是碰撞的事件。若要解决这个问题,我正在考虑在SQL表中保存哈希和序列化形式的数据。然后,如果我有一个缓存命中,我仍然会比较数据本身。

我过于推动这个? (这是一个160位散列 - SHA1)
有没有更好的方法来处理这个?

有帮助吗?

解决方案

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

我怀疑它不是gd,这是慢的一点。最有可能的候选者是处理数据的处理(从数据库?)。在这种情况下,您可以从优化数据库模式/和/或使用预先统一数据获得显着的好处。

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

这个问题是碰撞的事件。

过早优化 - 它不会发生。但如果您真的必须,拆分您使用的元数据以生成图形并将其存储在单个文件中(再次通过相同的哈希索引) - 然后在运行时进行比较。如果你设法碰撞,我们将有一个鞭打,给你买饮料。

我会建议看看JPGraph - 这是一个很好的软件,并且具有缓存内置。

c。

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top