Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи > Принятые патчи

Важная информация

Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.

Повод для гордости.

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.01.2011, 03:23   #1
Ambal
MaNGOS Dev
 
Аватар для Ambal
 
Регистрация: 22.06.2010
Сообщений: 78
Сказал(а) спасибо: 24
Поблагодарили 71 раз(а) в 25 сообщениях
Ambal Скоро придёт к известности
По умолчанию [11045][patch] Multiple MySQL connections to database

Всем трямс.

Очередной патч, который гипотетически снова должен что-то улучшить Оригинальная тема на офф форуме: Multiple MySQL connections to database

Вкратце по патчу:
1) переписан код по работе с базами данных. Также проведен рефакторинг.
2) используем несколько соединений с БД, отдельно для синхронных (SELECT) и асинхронных (INSERT+UPDATE+DELETE) запросов. Транзакции обрабатываются в отдельном потоке и только на асинхронном соединении!
3) используем меньшее количество мьютексов для работы. Класс SqlTransaction теперь также не нуждается в мьютексах.

Краткая статистика по типу SQL запросов, которые мы используем в коде мангоса:
1) SELECT - 398
2) INSERT - 88
3) DELETE - 255
4) UPDATE - 158

Чисто теоретически должно повысить производительность сервера. На практике может обернуться траблами с сохранностью данных в БД (что маловероятно) либо их релевантностью при чтении из базы (читаем про уровни изоляции транзакций).

ВНИМАНИЕ: обязательно сделайте бекап базы данных перед тестом! В случае если вдруг начнут обнаруживаться проблемы с целостностью данных - мы откажемся от идеи нескольких параллельных соединений к базе!

Репозиторий: https://github.com/Ambal/mangos
Ветка: master

Любые пожелания и комментарии приветствуются

Последний раз редактировалось Ambal; 15.01.2011 в 09:34.
Ambal вне форума  
5 пользователя(ей) сказали cпасибо:
Den (15.01.2011), KiriX (15.01.2011), Konctantin (15.01.2011), Vladimir (15.01.2011)
Старый 15.01.2011, 06:38   #2
zhenya
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 85
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 17 сообщениях
zhenya Скоро придёт к известности
По умолчанию

В кобольде сталкивались с проблемой, что персонаж не успевал сохраниться до попытки входа в мир при логаутах. Решение было метить транзакции отметкой содержащей гуид и в местах, где возможны траблы с чтением из базы использовались проверки нет ли незавершенной транзакции на этого персонажа.. но мы разделяли конекты (1 занимался запросами SELECT, 2 запросами INSERT+DELETE+REPLACE) насколько я помню.

Последний раз редактировалось zhenya; 15.01.2011 в 06:43.
zhenya вне форума  
Пользователь сказал cпасибо:
Ambal (15.01.2011)
Старый 15.01.2011, 09:01   #3
Ambal
MaNGOS Dev
 
Аватар для Ambal
 
Регистрация: 22.06.2010
Сообщений: 78
Сказал(а) спасибо: 24
Поблагодарили 71 раз(а) в 25 сообщениях
Ambal Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от zhenya Посмотреть сообщение
В кобольде сталкивались с проблемой, что персонаж не успевал сохраниться до попытки входа в мир при логаутах.
В текущем ядре по большому счету сие тоже теоретически возможно - все транзакции выполняются асинхронно. Т.е. если у вас переполненная очередь асинхронных запросов и игрок быстро перелогинивается, то его данные могут неуспеть сохраниться. Я добавлю возможность выполнить транзакцию синхронно - пригодиться если нужно будет подобное проделать, скажем, при старте сервера.

P.S. В этом патче мы также разделяем коннекты: 1) синхронный для SELECT 2) асинхронный для INSERT+DELETE+UPDATE

Последний раз редактировалось Ambal; 15.01.2011 в 09:09.
Ambal вне форума  
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[11045] Rewrite internals of DB layer. Simplify code and use less locking. Spawn and use separate co newsbot CMaNGOS Commits 22 22.01.2011 10:02
ошибка mysql lovepsone Флудильня 8 14.12.2010 22:13
Оптимизация Mysql {my.cnf} lina Прочая документация 10 20.06.2010 00:12
[10009] Fix realmd to accept more than 64 connections on windows. newsbot CMaNGOS Commits 0 31.05.2010 02:25


Текущее время: 16:38. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot