現在、私は 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 シャツではイメージできません。それらの名前はあまり「準備が整っていない」ため、単純に違いを推測するのは困難です)。名前)。何か不足していますか?
それで、何か考えはありますか?
とにかく、この特定の問題を解決するためだけに、別のデータベース ソリューションを導入することは可能です。問題はありません。
前もって感謝します:)
ケメルダ