mySQL数据库:分离/聚类(?)数据

时间:2013-10-10 08:57:22

标签: mysql cluster-analysis

目前我正在处理一个电子商务项目的大型mySQL事务数据库。我们从电子商店获得数据,包括销售的产品。每个电子商店都会添加有关产品之间相似性的信息,并将其列为。因此,例如商店A发送信息

  • 第1组:iPhone蓝色,iPhone黑色,iPhone绿色
  • 第2组:iPad蓝色,iPad黑色,iPad绿色等

另一家电子商店发送此类信息:

  • 第3组:iPhone粉红色,iPhone黑色
  • 第4组:iPad蓝色,iPad粉红色

每个产品都存储在表产品中:(重要:此表有大约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

此外,还有一个表格群组,其中包含上述群组:(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函数),然后获取这些组中的所有产品。然后更新表组以将这些组合并为一个。

此方法的主要问题是:

  • 非常有问题的计算复杂性。
  • 从电子商店获得的团体可能是错误的(!)。想象一下这个群体:
    • Group5:iPhone Black,iPad Black。考虑到这一群体,整个分离过程是错误的。你最终得到了一个与iPhone和iPad组合在一起的小组(这是错误的)。

所以,现在,最后,问题是: 任何想法如何解决这个问题?只是提示/提示就足够了,我只是完全陷入了缺乏知识的情况。

我正在玩模糊哈希算法/ k-means聚类,但在我看来它不适合这个问题。模糊散列似乎是考虑到产品的名称(这可能对iPhone很好,但不能用T恤成像,它们的名字不是很“准备好”,因此很难从中猜出差异名称)。我错过了什么吗?

那么,任何想法?

无论如何,只是为了解决这个特定的问题,可以引入不同的数据库解决方案,没有问题。

提前致谢:)

Chmelda

1 个答案:

答案 0 :(得分:0)

一个想法可能是添加一个表“group_conversion”,它将每个外部组号转换为您自己的组号。

在这种情况下,表格如下:

Group_external | NameMatch | ID_my_group
----------------------------------------
1              | null      | 1
2              | null      | 2
3              | null      | 1
4              | null      | 2
5              | "IPhone%" | 1
5              | "IPad%"   | 2

在插入来自电子商店的新数据时,您应首先将传入的组编号转换为您自己的组编号,然后再将其添加到“组”表中。 仅当您要在传入组(您提到的Group5)中分隔产品时才使用NameMatch字段。 因此,如果此字段为null,则只需转换ID。否则,只有在产品名称与NameMatch匹配时才转换ID。

要转换当前数据,可能有助于创建一个与“组”字段相同的新表(例如,Groups2),唯一的区别是Group是对新组编号的引用。 然后,您可以通过转换组的每个记录来填充新表。 转换完成后,删除Groups表并重命名Groups2表。

通过这种方式,您将获得更小的表大小,并且该表已包含合并数据,因此合并时不需要单独的查询。

希望这会有所帮助!