Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Плагин [MECH] SQLinv beta1.2 - двухсторонняя синхронизация инвентаря с БД [1.2.5-R5.0]

Тема в разделе "Релизы плагинов", создана пользователем smile42ru, 28 июл 2012.

  1. Инкогнито_о

    Инкогнито_о Старожил

    Баллы:
    153
    Каково часто происходит обновление инвентаря?
    (если игрок играет на сервере а я ему в таблице инвентарь изменил о_О)
    PS: намек на количество запросов к mysql
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    Да что же это такое... Читать надо же!

     
  4. Инкогнито_о

    Инкогнито_о Старожил

    Баллы:
    153
    Снова вы намека не поняли :trf:
    Предположим 100 игроков на сервере, все активно заходят выходят,крафтят, подымают предметы и тд,
    можно ли нагрузить таким способом mysql?
     
  5. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    Вы то ли очень толстый тролль, то ли читаете по диагонали.

    Разжевываю - на 100 человек в секунду предположим 50-70 тысяч запросов типа update (user_id, inventory) values (...) where (`user_id` = ...)

    Это даже и близко не пахнет хайлоадом и любая более менее адекватная по мощности машина проглотит такую нагрузку не пернув. На "домашних" серверах и так называемых "minecraft-хостингах" я не ручаюсь что будет адекватно работать потому что дома обычно винда, а на хостингах ограничения на query per second.
     
  6. Инкогнито_о

    Инкогнито_о Старожил

    Баллы:
    153
    А если таких серверов 7 и одна mysql? >>=DDD
    А вдруг на этой mysql еще и сайт стоит?)
    Жесткaчь да? >=D

    Может быть нужно сделать обновление таблицы через определенный промежуток времени?
    (может быть плохой совет но поразмыслите как можно доработать плагин....)
     
  7. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    Ну вы палку, то не перегибайте. Конечно же с 7-ми серверов это будет очень много.

    Я думал про обновление через промежуток времени, возможно будет изменен алгоритм, сейчас ведь только идею обкатываю... Может быть останется всего два эвента - вход и выход.
     
    I-Am-Black-Overlord нравится это.
  8. _Dimk_O_

    _Dimk_O_ Старожил Пользователь

    Баллы:
    123
    Skype:
    dimk__o
    Мне кажется, или положить MySQL не так уж и легко?
    Я думаю это будет зря.
    К примеру админ захотел заглянуть в инвентарь какого либо юзверя, и ему прийдется попросить его выйти или кикнуть чтоб посмотреть содержимое его инвентаря через сайт.

    Да и при краше сервера возможно некорректное срабатывание с таким событием вход/выход.
    В смысле когда слишком перегружаешь сервер к примеру редактором мира и все вылетают.
     
    Сникерсни и slavik123123123 нравится это.
  9. Инкогнито_о

    Инкогнито_о Старожил

    Баллы:
    153
    Есть плагин для просмотра инвентаря игрока.
    Нагрузить сильно можно, возможно даже положить...
     
    The Midnight Wizard нравится это.
  10. _Dimk_O_

    _Dimk_O_ Старожил Пользователь

    Баллы:
    123
    Skype:
    dimk__o
    Еще один плагин, еще несколько мегабайт скушанной оперативки и немного затраченного процессорного времени.
     
  11. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    Баг локализован и исправлен. Тема обновлена.

    Все мнения высказанные учтены - все обдумаю.
    Положить MySQL на самом деле очень трудно если он грамотно настроен. Особенно если сделано грамотное масштабирование, то практически не укладываемая база будет. Но 700 игроков сгенерят 700 000 запросов в секунду, а это уже какой-никакой хайлоад... В общем будем думать над этим делом...

    Прошу прощения, камрады, голова бо-бо уже :D
    700 игроков, по запросу в секунду это 700 запросов - плевое дело опять же... Да и не все же они копают или крафтят, кто то чатится, кто то афк и т.д....
     
    _Dimk_O_ нравится это.
  12. ensirius

    ensirius Старожил Пользователь

    Баллы:
    123
    У нас как раз 7 серверов на 1 mysql. MySQL и не такое выдерживает, в умелых руках.
     
  13. ensirius

    ensirius Старожил Пользователь

    Баллы:
    123
    Я с вами не согласен, мне пришлось везде где можно кэшировать, что бы запросами не поливать.
     
  14. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    А где я сказал что то про, то что база в дефолте?)
     
  15. _Dimk_O_

    _Dimk_O_ Старожил Пользователь

    Баллы:
    123
    Skype:
    dimk__o
    Опять какая-то кака.
    При входе на сервер выдало такое сообщение: 22:40:44 [SEVERE] java.lang.ArrayIndexOutOfBoundsException: 2

    Постоял немного...
    Вернулся в игру, только двинулся и такое сообщение в консоли:
    22:44:33 [SEVERE] null
    com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    The last packet successfully received from the server was 186,211 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3082)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2968)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3516)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2570)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1474)
    at sqlinv.DB.save(DB.java:59)
    at sqlinv.Inventory.checkInv(Inventory.java:118)
    at sqlinv.Main.onPickupItemEvent(Main.java:102)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:465)
    at net.minecraft.server.EntityItem.a_(EntityItem.java:154)
    at net.minecraft.server.EntityHuman.l(EntityHuman.java:363)
    at net.minecraft.server.EntityHuman.e(EntityHuman.java:355)
    at net.minecraft.server.EntityLiving.F_(EntityLiving.java:447)
    at net.minecraft.server.EntityHuman.F_(EntityHuman.java:168)
    at net.minecraft.server.EntityPlayer.a(EntityPlayer.java:233)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:346)
    at net.minecraft.server.Packet10Flying.handle(SourceFile:126)
    at net.minecraft.server.NetworkManager.b(NetworkManager.java:234)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:118)
    at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:581)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:470)
    at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
    Caused by: java.net.SocketException: Software caused connection abort: recv failed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)
    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)
    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2526)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2979)
    ... 31 more
    22:44:34 [SEVERE] null
    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed by the driver.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
    at com.mysql.jdbc.Util.getInstance(Util.java:382)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1213)
    at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1200)
    at com.mysql.jdbc.ConnectionImpl.createStatement(ConnectionImpl.java:2485)
    at com.mysql.jdbc.ConnectionImpl.createStatement(ConnectionImpl.java:2467)
    at sqlinv.DB.save(DB.java:58)
    at sqlinv.Inventory.checkInv(Inventory.java:118)
    at sqlinv.Main.onPickupItemEvent(Main.java:102)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:465)
    at net.minecraft.server.EntityItem.a_(EntityItem.java:154)
    at net.minecraft.server.EntityHuman.l(EntityHuman.java:363)
    at net.minecraft.server.EntityHuman.e(EntityHuman.java:355)
    at net.minecraft.server.EntityLiving.F_(EntityLiving.java:447)
    at net.minecraft.server.EntityHuman.F_(EntityHuman.java:168)
    at net.minecraft.server.EntityPlayer.a(EntityPlayer.java:233)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:346)
    at net.minecraft.server.Packet10Flying.handle(SourceFile:126)
    at net.minecraft.server.NetworkManager.b(NetworkManager.java:234)
    at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:118)
    at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78)
    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:581)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:470)
    at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
    Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    The last packet successfully received from the server was 186,211 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3082)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2968)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3516)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2570)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1474)
    at sqlinv.DB.save(DB.java:59)
    ... 23 more
    Caused by: java.net.SocketException: Software caused connection abort: recv failed
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)
    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)
    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2526)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2979)
    ... 31 more
    22:44:36
    Но не смотря на это данные сохранило успешно.:oops:

    хм...теперь перестало вовсе сохранять, и та большая ошибка что выше повторяется раз за разом при каждом выходе с сервера, а при входе выдается вот это:
    [SEVERE] com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed by the driver.
     
  16. makkarpov

    makkarpov Активный участник Пользователь

    Баллы:
    88
    А как ваш плагин справляется с NBT тегами в предметах? Они уже есть у предметов из модов, и будут в книгах из 1.3
     
  17. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    _Dimk_O_ поставьте плагин в чистую и попробуйте еще раз. То есть удалите табличку, конфиг. Все с нуля.
    У меня на боевых серверах крутится сейчас без ошибок. Подозреваю что значение в базе старого формата мешается, либо просто нестабильное соединение с базой данных.
     
  18. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    А никак. Это бета... Вон баги бы отловить, алгоритм отладить. А навешать функционал - не проблема.
    Сейчас сменим формат хранения данных на более подходящий (не inventorysql like), тогда в него можно будет все что угодно воткнуть на хранение.
     
  19. _Dimk_O_

    _Dimk_O_ Старожил Пользователь

    Баллы:
    123
    Skype:
    dimk__o
    хм...поставил не плагин в чистую, а на чистый bukkit.
    ошибок нет.

    вывод только один, придется собрать сервер с модами лично и никому не доверять :D
    спасибо за плагин ^_^

    Было бы хорошо, если бы облегчили способ хранения для php кодеров) ато сложновато как мне кажется.
     
  20. Автор темы
    smile42ru

    smile42ru Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    beastgaming.support
    Хочешь сделать хорошо - сделай это сам. А проблема была поди в каких нить ошметках от предыдущей версии :)

    Немного говнокода для парсинга формата на PHP
    Нормальный формат будет с делимитером в виде ":", без скобочек и выпендрежей. И парситься будет регуляркой. Упрощу всем жизнь :)
     
    _Dimk_O_ нравится это.
  21. Инкогнито_о

    Инкогнито_о Старожил

    Баллы:
    153
    Это типо понт?)

    Все равно нужно решать проблему с mysql, зачем излишне нагружать если можно это исправить?
     

Поделиться этой страницей