1

さて、私は PHP と Neo4J を使用して小規模なアフィリエイト システムを設計しており、Neo4J とグラフ データベースのしくみについてもう少し勉強しています。私の元のアフィリエイト システムは MySQL にあり、設計とストレージを Neo4J に移行するだけでパフォーマンスが向上するのはばかげています。

ただし、おそらく非常に間違っている機能がいくつかあり、経験豊富な開発者の助けを借りて、それがどれほど改善されるかを楽しみにしています. たとえば、システムは毎月、各アフィリエイトに支払う金額を計算する必要があります。これは、ユーザー ネットワーク全体を検索することを強制するいくつかの規則に従います。

たとえば、Joe の月給を計算するには、システムは次のことを行う必要があります。

Find Node Joe
function Calculate:
  Calculate amount of people referred (all tiers)
  Calculate the number of referral tiers (all tiers)
  Calculate points
  Store information inside object properties
  • tiers: Joe は Mary を参照し、Mary は次に Bob を参照します。Mary は Tier 1、Bob は Joe の下の Tier 2 です。
  • すべての階層: ジョー、メアリー、ボブに基づいて数を計算します

そのため、Calculate 関数は再帰関数のように見えます。Joe から紹介されたユーザーごとに、Joe に戻って番号を取得するまで、彼とそのすべての子供に対して Calculate 関数を実行する必要があります。

これは地獄のように遅いです。RabbitMQ または ZMQ を使用して、Joe の計算の「子プロセス」ごとにキューを作成することを考えました。pcntl のフォークを使用することも考えました。グラフ ネットワーク内でこの再帰プロセスを改善するにはどうすればよいですか? ツリー全体を通過する最良の方法は何ですか? 待ち行列?プロセスフォーク?

もう一つの例:

Calculate(Joe)
  Joe referred Mary, Bob, Peter
  Calculate(Mary)
  Mary referred Sara, Megan
    Calculate(Sara)
    Calculate(Megan)
  Calculate(Bob)
  Bob referred Billy, Michael
    Calculate(Billy)
    Calculate(Michael)
  Calculate(Peter)
  Peter referred Charles, Max
    Calculate(Charles)
    Calculate(Max)

これを 500 人の紹介者に掛けると、それぞれの紹介者は 500 人を超えることができます。めちゃくちゃ遅いので、毎月、Joe のダッシュボードにこれを表示する必要があります。:(

4

2 に答える 2

2

Neo4j と Cypher を使用すると、この Graph Gist の行に沿って何かを行うことができます: http://tinyurl.com/7vryzwz

基本的に、Cypher ( http://docs.neo4j.org/chunked/snapshot/cypher-query-lang.html ) クエリは

START referrer=node(1)
MATCH path=referrer-[:referred*1..]->refferee
RETURN referrer,refferee, length(path) as generation
ORDER BY length(path) asc

それは役に立ちますか?

/ピーター

于 2012-05-08T07:20:20.020 に答える
0

それほど難しくありません。

新しいアフィリエイトがサインアップする (またはアフィリエイトとしてカウントされるレベルに到達する) たびに、アフィリエイターのAffiliateカウントに「1」を追加します。これはゼロから開始する必要があります。そうしている間に、アフィリエイターのチェーンをずっと上に移動します..

ボブがフレッドを連れてきて、フレッドがアンを連れてくる。

Anne がサインアップすると、Fred は +1 を受け取り、Bob は +1 を受け取ります (または、必要に応じて、Anne は層 2 であるため、+1 未満を受け取ることもできます)。

これはボトムアップのアプローチであり、アフィリエーション ネットワークは木の束 (森) であるため、より適切に機能します。葉から枝、幹へと移動します。また、個人の提携成功の統計を常に更新して表示できることも意味します。

于 2012-05-08T02:35:04.257 に答える