StoreResouce работает слишком медленно с удаленным интерфейсомJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 StoreResouce работает слишком медленно с удаленным интерфейсом

Сообщение Anonymous »

eXistDB 6.2.0
Сохранение в локально работающую базу данных через удаленный интерфейс происходит на несколько порядков медленнее по сравнению с использованием встроенной базы данных. Я не могу понять, в чем проблема и как более эффективно хранить данные.
Мне нужно сохранить около 100 000 записей. При сохранении через удаленный интерфейс скорость составляет около 100 записей в секунду. Однако при использовании встроенной базы данных скорость составляет около 9000 записей в секунду.
Что я делаю не так или как это улучшить?
Ниже приведен пример кода.
удаленный uri: xmldb:exist://localhost:8080/exist/xmlrpc
встроенный uri: xmldb:exist://
В обоих случаях БД работает на одной и той же машине. Файл конфигурации базы данных прилагается.
final Random random = new Random();
final HashMap data = new HashMap();

for (int i = 0; i < records; i++) {
double latitude = MIN_LAT + (MAX_LAT - MIN_LAT) * random.nextDouble();
double longitude = MIN_LON + (MAX_LON - MIN_LON) * random.nextDouble();

String randomId = UUID.randomUUID().toString();
String randomName = generateRandomString(random, 30);
String randomValue = generateRandomString(random, 10);

String resourceId = prefix + "/" + randomId;
String xml = String.format(
"""

%s
%s
%.8f %.8f
""",
randomName, randomValue, latitude, longitude
);
data.put(resourceId, xml);
}
xmlDbService.saveEntity(data);
}

public void saveEntity(@NonNull HashMap resources) throws Exception {
var sortedResources = new TreeMap(resources);

Collection col = null;
String currentCollectionUri = null;
long start = System.currentTimeMillis();

int i = 0;
int c = 0;
try {
for (var entry : sortedResources.entrySet()) {
String resourceId = entry.getKey();
String xmlData = entry.getValue();

var param = splitResourceId(resourceId);
String collectionUri = param[0];
String resourceName = param[1];

if (col == null || !collectionUri.equals(currentCollectionUri)) {
if (col != null) {
col.close();
}
col = getOrCreateCollection(collectionUri);
col.setProperty("indent", "no");
currentCollectionUri = collectionUri;
}

i++;
if (i % 1000 == 0) {
long executionTime = System.currentTimeMillis() - start;
log.info("Inserted: {}, rate {} / sec", i, c * 1000L / executionTime);
start = System.currentTimeMillis();
c = 0;
}
XMLResource res = (XMLResource) col.createResource(resourceName, XMLResource.RESOURCE_TYPE);
res.setContent(xmlData);
col.storeResource(res);
c++;
log.trace("Resource saved: {} in collection: {}", resourceName, currentCollectionUri);
}
} finally {
if (col != null) {
col.close();
}
}
} ```


org.exist-db
exist-core
6.2.0



net.sf.xmldb-org
xmldb-api
1.7.0

Thank you for your help and/or advice.

V.


Подробнее здесь: https://stackoverflow.com/questions/790 ... -interface
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»