我在数据流中使用Beam-SDK 2.9版。 然后,在数据流中调用服务。 数据流和数据存储(数据存储模式的Firestore)区域位于东京。
我尝试访问服务中的数据存储。 用Pk获取数据非常慢。执行该过程时没有数据。
获取时间:60ms 放置时间:12ms 提交时间:77ms
我尝试使用单例对象访问数据存储。没什么改变。
1) datastore access code
Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
public Map<String, Object> get(List pklist, Object lifetime) {
String key = pklist.toString();
Key pk = keyFactory.newKey(key);
Entity entity = ThreadLocalTransaction.getThreadInstance().getTxn().get(pk);
if (entity != null) {
KryoSerializer ser = new KryoSerializer(HashMap.class);
Map<String, Object> valueMap = ser.deserialize(entity.getBlob(VALUE).toByteArray());
String lifetimeValue = entity.getString(LIFETIME);
if (ObjectUtils.equals(ObjectUtils.toString(lifetime), lifetimeValue)) {
return valueMap;
}
}
return null;
}
public void put(List pklist, Object lifetime, Map<String, Object> value) {
String key = pklist.toString();
Key pk = keyFactory.newKey(key);
KryoSerializer ser = new KryoSerializer(HashMap.class);
byte[] bytes = ser.serialize(value);
Entity entity = Entity.newBuilder(pk)
.set(VALUE,
BlobValue.newBuilder(Blob.copyFrom(bytes)).setExcludeFromIndexes(true).build())
.set(LIFETIME, StringValue.of(ObjectUtils.toString(lifetime)))
.set(TIMESTAMP, Timestamp.now())
.build();
ThreadLocalTransaction.getThreadInstance().getTxn().put(entity);
}
2) the main code
ThreadLocalTransaction.getThreadInstance().setTxn(datastore.newTransaction());
get();
put();
ThreadLocalTransaction.getThreadInstance().getTxn().commit();
3) pom
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-datastore</artifactId>
<version>1.56.0</version>
</dependency>