目前,我正在处理一个电子商务项目的大型 mySQL 事务数据库。我们从电子商店获取数据,包括销售的产品。每个电子商店都添加有关产品之间相似性的信息并将它们列为组。因此,例如商店 A 发送信息:
- 第 1 组:iPhone 蓝色、iPhone 黑色、iPhone 绿色
- 第 2 组:iPad 蓝色、iPad 黑色、iPad 绿色等。
另一家网店发送此类信息:
- 第 3 组:iPhone 粉色、iPhone 黑色
- 第 4 组:iPad 蓝色、iPad 粉色
每个产品都存储在表Products中:(重要提示:该表大约有 150 000 000 行)
Id | Name
------------------
1 | iPhone blue
2 | iPhone black
3 | iPhone green
4 | iPhone pink
5 | iPad blue
6 | iPad black
7 | iPad green
8 | iPad pink
此外,还有一个表Groups与上述组:(M:N 关系)
Id | Id_product | Group
--------------------------
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
4 | 5 | 2
5 | 6 | 2
6 | 7 | 2
7 | 4 | 3
8 | 1 | 3
9 | 5 | 4
10 | 8 | 4
现在,问题是组 1 + 3 和组 2 + 4 应该合并在一起。
此问题的当前(可怕)解决方案是基于获取产品的所有组(通过查询中的 GROUP_CONCAT 函数),然后是这些组中的所有产品。然后更新表组以将这些组合并为一个。
这种方法的主要问题是:
- 非常有问题的计算复杂性。
- 从电子商店获得的组可能是错误的(!)。想象一下这个组:
- 第 5 组:iPhone 黑色、iPad 黑色。考虑到这个群体,整个分离过程是错误的。您最终会得到一组同时使用 iPhone 和 iPad(这是错误的)。
所以,现在,最后,问题是: 任何想法如何解决这个问题?只是提示/提示就足够了,我只是完全缺乏我的知识。
我在玩模糊散列算法/k-means 聚类,但在我看来它不适合这个问题。模糊散列似乎正在考虑产品的名称(这可以用 iPhone 很好,但不能用 T 恤成像,它们的名称不是很“准备好”,所以很难从姓名)。我错过了什么吗?
那么,有什么想法吗?
无论如何,只是为了解决这个特定的问题,可以引入不同的数据库解决方案,这没有问题。
提前致谢:)
奇梅尔达