Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
flopix Написал:Ну все таки эта система была придумана для редко изменяющихся данных, таких как настройки, какие то флаги для сервисов и прочее. Откуда тут быть нагрузке на базу даже при большом онлайне?
Ведь никто не будет в такой системе хранитm счетчик выбитой адены или убитых мобов?
Это мультисет для хранения данных, что бы не быть срастранным человеком, который раздувает и так огромные классы L2Character & L2PcInstance. В нем могут храниться любые данные, а так же они могут меняться с любой частотой.
И да, на счет Вашего прошлого поста, можно поинтересоваться, Вы запускаете сервер на реалтайм джаве? Как полет без сборщика мусора? Собственно вопрос к javolution относится, который полностью неработоспособен на обычной виртуальной машине.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 561
Тем: 44
Зарегистрирован: Sep 2011
Репутация:
412
PHP код: <?php
/** Сохраняет все переменные игрока в базу. */
public void store() {
try (Connection con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement delSt = con.prepareStatement(sql_delete_vars);
PreparedStatement replSt = con.prepareStatement(sql_update_var);) {
delSt.setInt(1, ownerOid);
delSt.executeUpdate();
for (Entry<String, String> e : map.entrySet()) {
replSt.setInt(1, ownerOid);
replSt.setString(2, e.getKey());
replSt.setString(3, e.getValue());
replSt.executeUpdate();
}
}
catch (SQLException e) {
log.error("", e);
}
}
Как я понял вы сохраняете все данные в независимости от того изменились они или нет. По хорошему нужно ввести какой то флаг и сохранять в БД только те данные которые изменились.
При сохранении replSt.executeUpdate() вы выполняете в цикле по одно строчке. Не быстрее ли будет отправить все данные одним запросом?
Сообщений: 69
Тем: 7
Зарегистрирован: Jan 2015
Репутация:
88
01-15-2015, 08:12 PM
(Сообщение последний раз редактировалось: 01-15-2015, 08:17 PM Johnson.)
flopix Написал:Как я понял вы сохраняете все данные в независимости от того изменились они или нет. По хорошему нужно ввести какой то флаг и сохранять в БД только те данные которые изменились.
При сохранении replSt.executeUpdate() вы выполняете в цикле по одно строчке. Не быстрее ли будет отправить все данные одним запросом?
Да, при полном сохранении сначала удаляются все данные игрока, а затем вносятся вновь.
Так гарантированно удалятся все удаленные из мапы переменные без дополнительной геморойной логики.
Сначала я думал транзакциями сделать, но что-то меня остановило, не помню уже что. Сейчас попробую вспомнить, если ни чего серьезного - сделаю и перезалью.
Добавлено через 3 минуты
PS: перепроверил сейчас удаление переменных при удалении персонажа - всё ок, ложная паника.
Johnson получился в результате деления на null. Помогаю с джавой только за булочки с маком.
Сообщений: 561
Тем: 44
Зарегистрирован: Sep 2011
Репутация:
412
Johnson Написал:Да, при полном сохранении сначала удаляются все данные игрока, а затем вносятся вновь.
.
А зачем тогда REPLACE, а не INSERT ?
Сообщений: 69
Тем: 7
Зарегистрирован: Jan 2015
Репутация:
88
Так и не вспомнил, почему отказался от транзакций... Добавил и перезалил.
Johnson получился в результате деления на null. Помогаю с джавой только за булочки с маком.
Сообщений: 561
Тем: 44
Зарегистрирован: Sep 2011
Репутация:
412
Pointer*Rage Написал:И да, на счет Вашего прошлого поста, можно поинтересоваться, Вы запускаете сервер на реалтайм джаве? Как полет без сборщика мусора? Собственно вопрос к javolution относится, который полностью неработоспособен на обычной виртуальной машине.
Я java только учусь. Могли бы вы прояснить понятия: :confused:
"реалтайм джаве"
"обычной виртуальной машине"
И разве может не быть сборщика мусора?
Сообщений: 69
Тем: 7
Зарегистрирован: Jan 2015
Репутация:
88
01-15-2015, 08:20 PM
(Сообщение последний раз редактировалось: 01-15-2015, 08:22 PM Johnson.)
flopix Написал:А зачем тогда REPLACE, а не INSERT ? Пережитки прошлого, я сначала просто реплейсил, не удаляя, а потом заметил баг, не удаляющий переменную. Удаление добавил, а реплейс оставил. На сколько я знаю, он не сильно больше грузит базу, чем инсерт.
Да и запись при каждом обновлении переменной недавно была, тоже использовала этот запрос.
Добавлено через 31 секунду
flopix;384402 Написал:И разве может не быть сборщика мусора? Конечно, его аргументами отключить или переключить можно.
Johnson получился в результате деления на null. Помогаю с джавой только за булочки с маком.
Сообщений: 561
Тем: 44
Зарегистрирован: Sep 2011
Репутация:
412
To Johnson, сразу видно вашу работу над допиливанием сборки Acis, так как там по умолчанию ничего этого нет.
Сообщений: 69
Тем: 7
Зарегистрирован: Jan 2015
Репутация:
88
01-15-2015, 08:27 PM
(Сообщение последний раз редактировалось: 01-15-2015, 08:32 PM Johnson.)
flopix Написал:To Johnson, сразу видно вашу работу над допиливанием сборки Acis, так как там по умолчанию ничего этого нет. Они на то и ориентируются - лыжа эпилог (вроде бы) даунгрейженная до интерлюдии с небольшими правками. С одной стороны это хорошо. До этого сорцы фроузена поглядел, там проведена "глобальная работа" по впиливанию конфигов всего и вся...
Добавлено через 4 минуты
flopix;384402 Написал:"реалтайм джаве" https://blogs.oracle.com/vmrobot/entry/%..._real_time
Johnson получился в результате деления на null. Помогаю с джавой только за булочки с маком.
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
flopix Написал:Я java только учусь. Могли бы вы прояснить понятия: :confused:
"реалтайм джаве"
"обычной виртуальной машине"
И разве может не быть сборщика мусора?
В реалтайм ВМ нет вообще сборщика мусора. Если интересно - можете почитать на сайте оракла спеки и описания.
Johnson Написал:Конечно, его аргументами отключить или переключить можно.
В обычной ВМ сборщик мусора невозможно отключить. А вот изменить его поведение, либо сменить сам сборщик - легко.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
|