首页 > 解决方案 > 将昂贵函数调用的结果存储在 MySQL 表中

问题描述

假设我有一组可变长度的整数。我在这组整数上应用一个函数并得到一个结果。

myFunction(setOfIntegers) => myResult

假设调用myFunction非常昂贵,我想以某种方式存储此函数调用的结果。

在我的应用程序中,我已经在使用 MySQL,我想以某种方式创建一个带有setOfIntegersPK 和myResult附加字段的表。

我在想我可以通过setOfIntegers在将其存储到数据库之前将其转换为字符串来做到这一点。

这可以通过任何其他方式完成吗?或者是否有更好的方法来存储此类函数调用的结果,以避免使用相同的整数集第二次调用它们?

标签: mysqlfunctionoptimization

解决方案


我不了解 Java,但 Perl 有my $str = join(',', $array),PHP 有$str = implode(',', $array). 然后字符串$str可以用作PRIMARY KEY(假设它不是太长)。结果将进入另一列。

您的应用程序代码(在 Java 中)需要首先执行implodeSELECT查看该函数是否已经针对给定数组进行了评估。如果不是,则执行该功能并INSERTing以新行结束。

如果这将是多线程的,则可以INSERT IGNORE用来处理重复。(也有其他解决方案。)

另一个注意事项:如果您的整数集是有序的,那么我所描述的就是“完整的”。如果它是无序的,则在 imploding 之前对其进行排序。这将提供一个规范的表示。


推荐阅读