在MySQL数据库中存储字典的字典
假设我有一个字典,里面包含了字典的字典,用来做成对比较:
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亿行数据,只要你对需要访问的列建立索引,性能也不会有问题。