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
StoreResouce работает слишком медленно с удаленным интерфейсом ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1726762523
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.
Подробнее здесь: [url]https://stackoverflow.com/questions/79003527/storeresouce-is-too-slow-with-remote-interface[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия