EntityManager インターフェースは、サーバー・グリッド・データ・ストアに保持された状態からアプリケーションを切り離します。
EntityManager インターフェースを使用するためのコストは高いものではなく、実行する作業の種類により異なります。 アプリケーションが完成した後、必ず EntityManager インターフェースを使用して重要なビジネス・ロジックを最適化してください。EntityManager インターフェースを使用するコードを、 マップとタプルを使用するように修正できます。通常、このコードの修正は、コードの 10 % について必要になる可能性があります。
オブジェクト間のリレーションシップを利用すると、パフォーマンスへの影響が小さくなります。これは、マップを使用しているアプリケーションが、このようなリレーションシップを EntityManager インターフェースと同様に管理する必要があるからです。
EntityManager インターフェースを使用するアプリケーションは、ObjectTransformer 実装環境を提供する必要がありません。 アプリケーションは自動的に最適化されます。
@Entity
public class Person
{
@Id
String ssn;
String firstName;
@Index
String middleName;
String surname;
}
エンティティーを検索し、エンティティーを更新するコードを以下に示します。Person p = null;
s.begin();
p = (Person)em.find(Person.class, "1234567890");
p.middleName = String.valueOf(inner);
s.commit();
マップおよびタプルを使用する場合のコードは以下のとおりです。Tuple key = null;
key = map.getEntityMetadata().getKeyMetadata().createTuple();
key.setAttribute(0, "1234567890");
// The Copy Mode is always NO_COPY for entity maps if not using COPY_TO_BYTES.
// Either we need to copy the tuple or we can ask the ObjectGrid to do it for us:
map.setCopyMode(CopyMode.COPY_ON_READ);
s.begin();
Tuple value = (Tuple)map.get(key);
value.setAttribute(1, String.valueOf(inner));
map.update(key, value);
value = null;
s.commit();
これらのコード・スニペットは両方とも同じ結果になります。アプリケーションは、いずれか一方、または両方のスニペットを使用できます。2 番目のコード・スニペットは、マップを直接使用する方法およびタプル (キーと値の組) を操作する方法を示しています。 値タプルには 0、1 および 2 に索引が設定された firstName、middlename、および surname という 3 つの属性があります。キー・タプルには 0 に索引が設定された、ID 番号という単一の属性があります。EntityMetadata#getKeyMetaData メソッドまたは EntityMetadata#getValueMetaData メソッドを使用して、タプルを作成する方法を確認できます。 エンティティーのタプルを作成するには、これらのメソッドを使用する必要があります。タプル・インターフェースを実装して、そのタプル実装のインスタンスを渡すような操作は、実行できません。