在MySQL数据库中存储字典的字典

1 投票
1 回答
1175 浏览
提问于 2025-04-17 13:22

假设我有一个字典,里面包含了字典的字典,用来做成对比较:

 dict_of_dict = {"apple":{"apple":1, "orange":.5, "banana":.7}, "orange":{"orange":1, "apple": .3, "banana":.8}, "banana":{"banana":1, "apple":.7, "orange":.8}}

每个嵌套的字典可能包含大约20万个条目。

一种(很糟糕的)在MySQL中存储这些数据的方法是创建两个表,一个叫fruit(水果),另一个叫fruit mappings(水果映射),其中fruit表存储每种水果的ID,而fruit mappings表则存储每对水果的评分。

fruit表有两列,一列是ID,另一列是水果名称:

 fruit_id fruit
 0        apple
 1        orange
 2        banana

fruit mappings表将fruit表中的ID与每对比较的评分进行关联。

    fruit_id_A   fruit_id_B    score

       0               0         1        
       0               1        .5
       0               2        .7

...对于水果ID 1和2也是如此。当处理大约20万个条目时,你可以看到明显的问题。在实际应用中,我们不会有大约200,000的平方行,因为只有一部分水果会被比较,但即使假设有50,000种水果得到评分,这也会导致我们有10,000,000,000行数据。有人有没有更好的方法?

1 个回答

2

一种(糟糕的)方法是在MySQL中存储这些数据,就是创建两个表,一个叫“水果”,另一个叫“水果映射”。“水果”表用来存储每种水果的ID,而“水果映射”表则存储每对水果之间的分数。

其实这并不是一种糟糕的方法,而是关系型数据库中比较合理的做法。

如果你的水果种类永远不会改变,那你可以只用一个表,里面记录水果的名字和一个数组,数组里存放所有的分数。不过,你需要知道数组中的哪个位置对应哪个水果。

我会选择明显的关系型方法。即使有2亿行数据,只要你对需要访问的列建立索引,性能也不会有问题。

撰写回答