2

私が2つのセットを持っているとしましょう

Set 1: A, B, C

Set 2: X, Y, Z

要素にアクセスするときは、と一緒に他の要素Bも取得する必要がありますACBSet 1

これは、各セットを並べ替え、セットの各要素のハッシュテーブルにエントリを作成し、そのセットで使用可能なすべての値を保存/コピーすることで実現できます。

A: A, B, C
B: A, B, C
C: A, B, C

ただし、これにはメモリ コストがかかり、大規模なデータ セットでは非効率になる可能性があります。グラフデータベースを使わずにこれを達成しようとしています。データは MySQL に保存されます。助言がありますか?

4

2 に答える 2

1

たとえば、各データ行のデータベースのデータセットに、要素の識別子 (または、2 番目の方法を使用する場合は、要素の抽象的な「対」の識別子 (データベースには実際には存在しない) へのポインターを格納できます。次に、PHP で次のような配列を作成する必要があります。

array(
    'id1' => array(
        'value' => 'A', 
        'links' => array('id2', 'id3')
    ), 
    'id2' => array(
        'value' => 'B',
        'links' => array('id1', 'id3')
    ), 
    'id3' => array(
        'value' => 'C',
        'links' => array('id1', 'id2')
    )
);

または、(A、B、C) のカップルを識別子でマークして、次のような配列を取得することもできます。

array(
    'couples' => array(
        'c1' => array('id1', 'id2', 'id3')
    ), 
    'values' => array(
        'id1' => array(
            'value' => 'A', 
            'links' => array('c1')
        ), 
        'id2' => array(
            'value' => 'B',
            'links' => array('c1')
        ), 
        'id3' => array(
            'value' => 'C',
            'links' => array('c1')
        )
    )
);

次に、リンクされたすべての要素を取得する単純な関数を記述します。最初のケースでは、ループしてlinks、現在のキーで現在の配列から項目を取得する必要があります。2 番目のケースでは、ループしてlinks、現在のカップルからすべての要素をキーでcouples取得し、そこからすべての項目を取得する必要があります。

于 2012-09-07T10:02:15.127 に答える
0

NOSQL DB と SQL の代替案の作成の背後にある主な原動力に到達したと思います:-)

MySQL でこれを行うには 2 つの方法があります (任意の長さのセットを想定)。

1- DB 内の各セットを参照し、その一意の識別子を項目テーブルの列として使用します。次のようになります。

id    set_id   name  whatever_col1   whatever_col2
1     1        A     ...             ...
2     1        B     ...             ...
3     1        C     ...             ...
4     2        X     ...             ...
5     2        Y     ...             ...
... 

または、ペア (A,B)、(A,C)、(B,C) (X,Y)、... を持つキー ペア関係テーブルを作成します。

于 2012-09-07T10:04:58.323 に答える