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

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


*****

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



всем привет.

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


*

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



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

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


******

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



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


--------------------

Shard Have: "The Express Written Permission".

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


*****

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



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

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



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


********

Master
Сообщений: 1.234
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 5276
Пользователь №: 15.607
Возраст: 25



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

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

Можно хоть каждую секунду, особенно если это все асинхронно выполняется.


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


*****

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



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


**********

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



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

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


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


********

Master
Сообщений: 1.234
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 5276
Пользователь №: 15.607
Возраст: 25



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

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


И каждый раз заного будешь открывать новые сессии не закрывая старые.
Это по твоему норм?


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


*

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



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


*****

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



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

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


********

Master
Сообщений: 1.234
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 5276
Пользователь №: 15.607
Возраст: 25



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

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

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


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

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

Можно так-же делать раз в х времени по таймеру/при старте сервера, проходиться по всем персонажам, соберать данные и записывать в таблицу в базе. Это хоть и будет выполняться реже, но будет нагружать сервер сильнее и возможно даже создавать лаги ( смотря сколько у тебя данных в памяти сервера ).


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


**********

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



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

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

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

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


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


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


*****

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



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

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


********

Master
Сообщений: 1.234
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 5276
Пользователь №: 15.607
Возраст: 25



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

Зачем шариться по сейвам? Во первых для этого прийдется делать отдельную программу которая будет полностью сжирать как минимум 1 поток распарсивая твой сейв, во вторых писать парсер для сейвов и в третьих гораздо легче делать обновление/новую запись в базе при действии игрока на сервере и иметь обновление топа в режиме live.


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


*****

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



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


********

Master
Сообщений: 1.234
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 5276
Пользователь №: 15.607
Возраст: 25



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

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


Жесть)
Да, так будет правильно.


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


*****

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



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


******

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



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


--------------------

Shard Have: "The Express Written Permission".

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


********

Master
Сообщений: 1.234
Регистрация: 29.12.2012
Группа: Пользователи
Наличность: 5276
Пользователь №: 15.607
Возраст: 25



Цитата(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Отправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 

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