Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  1 2 3 >  
Ответить в эту темуОткрыть новую тему
> mysql
Famous
сообщение 20.5.2017, 1:07
Сообщение #1


******

Expert
Сообщений: 635
Регистрация: 12.4.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 3.499



всем привет.

хочу поинтересоваться, как лучше обновлять записи в таблице?
то есть, делать это всегда когда игрок заходит или лучше раз в 24 часа ?
когда обновляешь запись в базе, нужно обязательно писать db.close или это не стоит?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Reality Audit
сообщение 16.7.2017, 15:07
Сообщение #2


**

Neophyte
Сообщений: 12
Регистрация: 16.7.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.540
Возраст: 30



Смотря какие и сколько. Ты для статистики играющих собираешься?
База спокойно пишет инфу в большом количестве и если у тебя там не миллион колонок с индексами, с апдейтами тоже не должно быть проблем

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Llirik
сообщение 16.7.2017, 18:59
Сообщение #3


******

Expert
Сообщений: 681
Регистрация: 5.9.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.259



Смотря, что ты собираешься делать. Если TOP, то, есть смысл обновлять раз в 1-2 часа (через столб TIMERF) и проверкой на (!<account.block>). А то прикинь какой-нибудь GM забанит игрока и он в топе так и останется пока ты сам не заметишь, и не вытрешь его сам руками или удалит... Не всегда удобно т.к. лучше автомат.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Famous
сообщение 17.7.2017, 8:46
Сообщение #4


******

Expert
Сообщений: 635
Регистрация: 12.4.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 3.499



Цитата(Llirik @ 16.7.2017, 18:59) *

Смотря, что ты собираешься делать. Если TOP, то, есть смысл обновлять раз в 1-2 часа (через столб TIMERF) и проверкой на (!<account.block>). А то прикинь какой-нибудь GM забанит игрока и он в топе так и останется пока ты сам не заметишь, и не вытрешь его сам руками или удалит... Не всегда удобно т.к. лучше автомат.



Спасибо:)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 17.7.2017, 11:38
Сообщение #5


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8772
Пользователь №: 15.607



Если Connect делаешь то и Close всегда после выполнения запросов.

Для остальных вопросов не ясны требования.

Можно хоть каждую секунду, особенно если это все асинхронно выполняется.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Famous
сообщение 18.7.2017, 20:46
Сообщение #6


******

Expert
Сообщений: 635
Регистрация: 12.4.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 3.499



при запуске db.connect и все, а потом уже команды для записи в базу.
при этом закрывать dc.close не нужно, верно ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 19.7.2017, 11:04
Сообщение #7


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22566
Из: Северная Корея
Пользователь №: 11.273



Цитата
при запуске db.connect и все, а потом уже команды для записи в базу.
при этом закрывать dc.close не нужно, верно ?

Открыл коннект, поработал с базой, закрыл коннект. Так нужно.


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 19.7.2017, 11:56
Сообщение #8


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8772
Пользователь №: 15.607



Цитата(Famous @ 18.7.2017, 19:46) *

при запуске db.connect и все, а потом уже команды для записи в базу.
при этом закрывать dc.close не нужно, верно ?


И каждый раз заного будешь открывать новые сессии не закрывая старые.
Это по твоему норм?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Reality Audit
сообщение 19.7.2017, 18:56
Сообщение #9


**

Neophyte
Сообщений: 12
Регистрация: 16.7.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.540
Возраст: 30



Смотря какой лимит пула конекций базы. Ребутить базу для того чтобы они закрылись - верный дедовский метод (IMG:style_emoticons/default/biggrin.gif)
Открыл - поработал - закрыл.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Famous
сообщение 20.7.2017, 10:26
Сообщение #10


******

Expert
Сообщений: 635
Регистрация: 12.4.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 3.499



ну папример топ500
всегда открыт коннект и когда игрок заходит в игру, идет записать в базу данных и после этого все равно соединение остается открытым.

как лучше сделать топ500 ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 20.7.2017, 15:53
Сообщение #11


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8772
Пользователь №: 15.607



Цитата(Famous @ 20.7.2017, 9:26) *

ну папример топ500
всегда открыт коннект и когда игрок заходит в игру, идет записать в базу данных и после этого все равно соединение остается открытым.

как лучше сделать топ500 ?


Лучше делать такое в режиме live, когда у тебя при каждом обновлении атрибутов, которые нужны для топа будет обновляться таблица в базе. Допустим если у тебя даётся опыт за монстров и ты хочешь сделать топ500 игроков по накопленному опыту. У тебя при получении опыта каждый раз будет обновляться таблица в базе. Разумеется что делать все это надо асинхронно через AQUERY/AEXECUTE или как там в сферах.

Когда человек заходит на сайт, ты уже просто через SQL запрашиваешь данные используя order by и limit 500.

Можно так-же делать раз в х времени по таймеру/при старте сервера, проходиться по всем персонажам, соберать данные и записывать в таблицу в базе. Это хоть и будет выполняться реже, но будет нагружать сервер сильнее и возможно даже создавать лаги ( смотря сколько у тебя данных в памяти сервера ).
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Juzzver
сообщение 20.7.2017, 15:56
Сообщение #12


**********

Модератор RunUO
Сообщений: 3.425
Регистрация: 1.11.2008
Группа: Супермодераторы
Наличность: 22566
Из: Северная Корея
Пользователь №: 11.273



Цитата
ну папример топ500
всегда открыт коннект и когда игрок заходит в игру, идет записать в базу данных и после этого все равно соединение остается открытым.

как лучше сделать топ500 ?

Если ты не закрыл сессию с подключением, то она продолжает существовать. Спустя время ты опять открываешь новую сессию и так же не закрываешь, в итоге у тебя хранится куча неиспользуемых сессий. Этим ты рискуешь исчерпать доступный лимит подключений, после чего никакие данные в базу разместить ты не сможешь, или же вовсе всё навернется медным тазом.

Если ты заходишь в туалет, чтобы нагадить к примеру, но при этом не смываешь, то спустя время пулл унитаза будет переполнен, понимаешь?) Так и с подключением к БД надо поступать:
Цитата
Открыл коннект, поработал с базой, закрыл коннект. Так нужно.


Сообщение отредактировал Juzzver - 20.7.2017, 15:56


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Famous
сообщение 20.7.2017, 17:53
Сообщение #13


******

Expert
Сообщений: 635
Регистрация: 12.4.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 3.499



Понял:) спасибо
У меня в данном случае 5 таблиц и обновляются при заходи в игре и всенда коннект открыт. Как воо поступить?

Или как вариант собирать сейвы а потом отдельно на компе записывать все в базу?(IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 20.7.2017, 20:21
Сообщение #14


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8772
Пользователь №: 15.607



И что же ты понял если ты задал тот же самый вопрос?

Зачем шариться по сейвам? Во первых для этого прийдется делать отдельную программу которая будет полностью сжирать как минимум 1 поток распарсивая твой сейв, во вторых писать парсер для сейвов и в третьих гораздо легче делать обновление/новую запись в базе при действии игрока на сервере и иметь обновление топа в режиме live.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Famous
сообщение 20.7.2017, 21:00
Сообщение #15


******

Expert
Сообщений: 635
Регистрация: 12.4.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 3.499



Например, при онлаин 50+ игрок зашел в игру (обновили/добавили) и сразу же закрыли соединение, так будет правильно ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 20.7.2017, 21:56
Сообщение #16


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8772
Пользователь №: 15.607



Цитата(Famous @ 20.7.2017, 20:00) *

Например, при онлаин 50+ игрок зашел в игру (обновили/добавили) и сразу же закрыли соединение, так будет правильно ?


Жесть)
Да, так будет правильно.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Famous
сообщение 20.7.2017, 22:57
Сообщение #17


******

Expert
Сообщений: 635
Регистрация: 12.4.2005
Группа: Пользователи
Наличность: 0
Пользователь №: 3.499



пасибо (IMG:style_emoticons/default/smile.gif)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Llirik
сообщение 20.7.2017, 23:12
Сообщение #18


******

Expert
Сообщений: 681
Регистрация: 5.9.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.259



Приведите пример AQUERY/AEXECUTE!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Aimed
сообщение 20.7.2017, 23:57
Сообщение #19


*********

Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 8772
Пользователь №: 15.607



Цитата(Llirik @ 20.7.2017, 22:12) *

Приведите пример AQUERY/AEXECUTE!


У тебя проблемы с навигацией на SphereWiki?
http://wiki.spherecommunity.net/index.php?title=AQUERY
http://wiki.spherecommunity.net/index.php?title=AEXECUTE

Примеры внизу каждой страници по ссылке
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Reality Audit
сообщение 21.7.2017, 20:10
Сообщение #20


**

Neophyte
Сообщений: 12
Регистрация: 16.7.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.540
Возраст: 30



Пиво @Juzzver`y
Открытие коннекции, сбор атрибутов, запись в базу и закрытие коннекции - относительно недорогие операции. Ты их не заметишь, даже если постоянно будет заходить и выходить 50 игроков. С оговоркой что ты не собираешь стопицот аттрибутов - тогда парсинг свежего сейва будет оптимальнее.

Для сравнения - в свое время я отключал сон регионов и писал в базу статистику действий АИ и запись шла на каждый ивент, плюс одни мобы воевали с другими - это спокойно шло в фоне, за исключением ряда ситуаций.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

3 страниц V  1 2 3 >
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 16.4.2024, 21:08
Designed by Nickostyle