2

現在、私は 1 つの e コマース プロジェクト用に大規模な mySQL トランザクション データベースを扱っています。販売された製品を含む e ショップからデータを取得します。各 e ショップは、製品間の類似点に関する情報を追加し、それらをグループとしてリストします。たとえば、ショップ A が情報を送信します。

  • グループ 1: iPhone ブルー、iPhone ブラック、iPhone グリーン
  • グループ 2: iPad ブルー、iPad ブラック、iPad グリーンなど。

別の e ショップは、次のような情報を送信します。

  • グループ 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 関数によって) 製品のすべてのグループを取得し、次にこれらのグループからすべての製品を取得することに基づいています。次に、テーブル グループを更新して、これらのグループを 1 つにマージします。

このアプローチの主な問題は次のとおりです。

  • 非常に問題のある計算の複雑さ。
  • e ショップから取得したグループは間違っている可能性があります (!)。このグループを想像してください:
    • グループ 5: iPhone ブラック、iPad ブラック。このグループを考慮すると、分離プロセス全体が間違っています。iPhone と iPad が一緒になった 1 つのグループになってしまいます (それは間違いです)。

それでは、最後に質問 です。この問題にどのようにアプローチするかについてのアイデアはありますか? ヒント/ヒントだけで十分です。知識不足で完全に立ち往生しています。

ファジーハッシュアルゴリズム/ k-means クラスタリングをいじっていましたが、この問題には適していないようです。ファジーハッシュは、製品のアカウント名に組み込まれているようです (iPhone ではうまくいく可能性がありますが、T シャツではイメージできません。それらの名前はあまり「準備が整っていない」ため、単純に違いを推測するのは困難です)。名前)。何か不足していますか?

それで、何か考えはありますか?

とにかく、この特定の問題を解決するためだけに、別のデータベース ソリューションを導入することは可能です。問題はありません。

前もって感謝します:)

ケメルダ

4

1 に答える 1