1

我需要帮助来理解为什么我保存在数据存储中的模型对象之一花费了如此多的写入操作。查看开发控制台中的数据存储查看器,它说我需要 31 个写入操作来创建这个对象;单击 Show Indexes 链接,我可以看到为该对象定义了两个索引(如预期的那样),并阅读文档:

新实体放置(每个实体,无论实体大小):2 次写入 + 每个索引属性值 2 次写入 + 每个复合索引值 1 次写入

因此,如果我理解正确,创建或删除此对象需要 2 次写入 + 2 次写入 * 2 索引属性值 + 0(我没有复合索引值)= 6 次写入操作?

修改:

现有实体放置(每个实体) 1 次写入 + 每个修改的索引属性值 4 次写入 + 每个修改的复合索引值 2 次写入

如果修改了非索引属性,则应该花费 1 次写入,如果修改了一个或两个索引属性,则应该花费 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 成本的来源。

要考虑的另一件事是索引写入。您拥有的索引属性或复合索引条目越多,编写实体的成本就越高。

于 2012-06-03T23:24:11.117 回答