我有一个具有以下格式的MySQL数据库:

id      string
1        foo1...
2        foo2...
..       ...

此DB中有> 100K条目。

我要做的是每个字符串,将其相互比较,并存储比较的一些指标。这样做基本上将产生大小的2D矩阵 NxN 在哪里 N 是DB中的行数。

我最初的想法是创建另一个DB,其中每个索引对应于第一个DB中的索引字符串,每个列是比较两个字符串的值。例如,第二个数据库中的ID 1列2是从比较第一个DB中的ID1和ID2输出的值。

第二个DB的格式:

id    col1    col2    col3    ....
1       1      0.4     0.5    .....
...    ...     ...      ...

这种创建第二个数据库的方式将导致100k行x 100k列,这是手头的问题。处理这样的大型数据集的最佳方法是什么?将数据存储在文本文件中的效率更高(例如,每个文本文件对应于第二dB中的一行。)

有帮助吗?

解决方案

通常,计算即时的距离而不是存储$ n^2 $值是更实用的。如果可能的话,您将需要使用启发式方法来选择这些项目可能足够相似,这样您就不会浪费时间计算距离与无关紧要的项目。 PostgreSQL可以创建一个 角色trigram的索引 在能够有效查询其他足够相似的字符串的字符串中(通过JACCARD相似性系数衡量)。

由于MySQL中允许的最大列数为4096。即使不是这种情况,以这种方式使用RDBMS也被认为是不良练习,而且这种表很难很难与之合作。

如果由于某种原因您必须存储一个密集的距离矩阵,则 HDF5 比RDBM更有效。

许可以下: CC-BY-SA归因
scroll top