1

GAE-Jに簡単なタグ付けシステムが必要です。

私が見ているように、タグ付けされているエンティティには、関連付けられているタグを参照するキーのコレクションが必要です。

タグエンティティには、タグ文字列自体と、タグに関連付けられたエンティティを指すキーのコレクションが含まれている必要があります。

エンティティのタグのリストが変更されると、タグが不明な場合、システムは新しいタグを作成し、エンティティのキ​​ーをそのタグのキーコレクションに追加します。タグがすでに存在する場合は、エンティティのキ​​ーがタグのキーコレクションに追加されるだけです。

これは私には比較的単純で議論の余地のないように思えますが、念のために、この設計についていくつかフィードバックをお願いします。

4

2 に答える 2

3

Tagsなぜテーブルを保管するのですか?これは非常にリレーショナルデータベース志向のようであり、データストア上でスケーラブルまたは特に有用ではありません。

代わりに、タグ付け可能なエンティティごとに文字列のリストを保存するだけです。

@Persistent
private List<String> tags;

エンティティのタグの取得は(データストアへの呼び出しではなく)単純なルックアップであり、そのタグを持つ他のアイテムの検索はデータストアへの1回の呼び出しになります。

Query query = pm.newQuery("select from Entities " +
                          "where tagNameParam in tags" +
                          "parameters String tagNameParam");

また、タグがすでに存在するかどうかを確認したり、に新しい行を作成したりする必要がないため、書き込みが高速になりますTags

ただし、それほど単純ではないのは、すべてのエンティティのすべての一意のタグを見つけることです。

于 2010-03-28T00:35:08.427 に答える
0

私はデータストアの周りに頭を悩ませているところです(私は低レベルのインターフェースではなくJPAを使用しています)。私の即時の反応は、エンティティがタグを所有できず、タグがエンティティを所有できないということです。これは、多対多の古典的なリレーショナルです。私の経験では、可能な限り所有関係を使用する必要があります。この場合は使用できませんので、多対多の管理には十分注意が必要です。

特に、一貫性を保証するためにトランザクションを使用する方法はありません。一貫性のないデータストア用にコードを準備する必要があります。つまり、両方のエンティティのキ​​ーが相互に参照していない可能性があり、その場合、コードが崩れたり、クラッシュしたり、爆発したりしないようにする必要があります。

于 2010-03-27T23:07:24.110 に答える