В способе обработки потока данных Java есть способ улучшить производительность хранилища данных доступа? - PullRequest
0 голосов
/ 10 июня 2019

Я использую Beam-SDK версии 2.9 в моем потоке данных. и вызвать службу в потоке данных. регион dataflow и datastore (firestore режима хранилища данных) 'Токио.

Я пытаюсь получить доступ к хранилищу данных в службе. получать данные с помощью Pk очень медленно. И при выполнении процесса данных нет.

время получения: 60 мс положить время: 12 мс время фиксации: 77мс

Я пытался использовать одноэлементный объект для доступа к хранилищу данных. ничего не изменилось.

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...