【问题标题】:mySQL database: Separating/clustering(?) datamySQL 数据库:分离/聚类(?)数据
【发布时间】: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 恤成像,他们的名字不是很“准备好”,所以很难从姓名)。我错过了什么吗?

那么,有什么想法吗?

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

提前致谢:)

奇美达

【问题讨论】:

    标签: mysql cluster-analysis


    【解决方案1】:

    一个想法可能是添加一个表“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
    

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

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

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2011-10-16
      • 1970-01-01
      相关资源
      最近更新 更多