1

データストアで保持しているモデルオブジェクトの1つに、書き込み操作が非常に多くかかる理由を理解するための支援が必要です。開発コンソールのデータストアビューアを見ると、このオブジェクトを作成するには31の書き込み操作が必要であることがわかります。[インデックスの表示]リンクをクリックすると、このオブジェクトに2つのインデックスが定義されていることがわかります(意図したとおり)。ドキュメントを読んでください。

新規エンティティプット(エンティティのサイズに関係なく、エンティティごと):2書き込み+2インデックス付きプロパティ値ごとの書き込み+1複合インデックス値ごとの書き込み

したがって、正しく理解していれば、このオブジェクトを作成または削除するには、2回の書き込み+2回の書き込み*2インデックス付きプロパティ値+0(複合インデックス値がない)= 6回の書き込み操作が必要ですか?

変更するには:

既存のエンティティプット(エンティティごと)1書き込み+4変更されたインデックス付きプロパティ値ごとの書き込み+2変更された複合インデックス値ごとの書き込み

インデックス付けされていないプロパティが変更された場合は1書き込み、1つまたは2つのインデックス付きプロパティが変更された場合は5(または9)の書き込みが必要ですか?開発コンソールが31の書き込み操作が必要であると報告する理由について私は混乱しています...

オブジェクトは次のとおりです。

public class Media implements IMedia {

private static final long serialVersionUID = 1657456300412658003L;
// Get a file service
private static FileService fileService = FileServiceFactory.getFileService();

@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
@Persistent
private String title;

@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
@Persistent
private String author;

@Persistent
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private Text description;

@Persistent
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private MediaType mediaType;

@Persistent
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private String fullPath;

@Persistent
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private String fileName;
@Persistent
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private long size;
@Persistent
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private String contentType;
@Persistent
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private boolean isDeactive;
@Persistent
private String chartId;
@Transient
private IChart chart;
@Persistent
private boolean approved;

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;

@Persistent
private Date imageDate;
@Transient
private BlobKey blobKey;
@Persistent
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private float imageLatitute = 190;
@Persistent
@Extension(vendorName="datanucleus", key="gae.unindexed", value="true")
private float imageLongitute = 190;

...

4

1 に答える 1

1

Appstats をオンにしてみてください。これにより、I/O コストがどこから発生するかについての優れた洞察が得られます。

考慮すべきもう 1 つのことは、インデックスの書き込みです。インデックス付きプロパティまたは複合インデックス エントリが多いほど、エンティティの書き込みにかかるコストが高くなります。

于 2012-06-03T23:24:11.117 に答える