【发布时间】:2013-10-17 22:50:01
【问题描述】:
目前我正在处理一个电子商务项目的大型 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 恤成像,他们的名字不是很“准备好”,所以很难从姓名)。我错过了什么吗?
那么,有什么想法吗?
无论如何,只是为了解决这个特殊的问题,可以引入不同的数据库解决方案,这没有问题。
提前致谢:)
奇美达
【问题讨论】: