Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Pytanie] Baza danych pod pluginy ?


Rekomendowane odpowiedzi

Opublikowano

Witam.

 

Jak uważacie lepiej podpiąć pluginy pod MySQL czy lepiej nie ? 

 

np: Skript, MaxBans, FunnyGuild ?

bez reklam

Opublikowano

Ok :) 

 

Mam jeszcze jedno pytanie odnośnie błędów w konsoli przy uruchamianiu serwera, a nie chcę tworzyć nowego tematu. 

 

Więc oto co przy starcie się pokazuje : 

[14:15:09 INFO]: [Skript] Enabling Skript v2.1.2
[14:15:09 WARN]: Exception in thread "Head Conversion Thread - 0" 
[14:15:09 WARN]: java.lang.IllegalArgumentException: Empty string not allowed
[14:15:09 WARN]: 	at net.minecraft.server.v1_7_R2.NBTTagString.<init>(SourceFile:14)
[14:15:09 WARN]: 	at net.minecraft.server.v1_7_R2.NBTTagCompound.setString(SourceFile:80)
[14:15:09 WARN]: 	at org.spigotmc.HeadConverter$1.run(HeadConverter.java:134)
[14:15:09 WARN]: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[14:15:09 WARN]: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[14:15:09 WARN]: 	at java.lang.Thread.run(Thread.java:745)

Oraz raz na jakiś czas pokazuje się taki error który crashuje serwer: 

[14:15:47 INFO]: [BarAPI] Disabling BarAPI v3.2
[14:15:47 ERROR]: Error occurred while disabling BarAPI v3.2 (Is it up to date?)
java.lang.NoSuchMethodError: org.bukkit.Server.getOnlinePlayers()Ljava/util/Collection;
	at me.confuser.barapi.BarAPI.onDisable(BarAPI.java:98) ~[?:?]
	at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:252) ~[spigot_1.7.9.jar:git-Spigot-1387]
	at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:348) [spigot_1.7.9.jar:git-Spigot-1387]
	at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:424) [spigot_1.7.9.jar:git-Spigot-1387]
	at org.bukkit.plugin.SimplePluginManager.disablePlugins(SimplePluginManager.java:417) [spigot_1.7.9.jar:git-Spigot-1387]
	at org.bukkit.craftbukkit.v1_7_R2.CraftServer.disablePlugins(CraftServer.java:398) [spigot_1.7.9.jar:git-Spigot-1387]
	at net.minecraft.server.v1_7_R2.MinecraftServer.stop(MinecraftServer.java:386) [spigot_1.7.9.jar:git-Spigot-1387]
	at net.minecraft.server.v1_7_R2.MinecraftServer.run(MinecraftServer.java:509) [spigot_1.7.9.jar:git-Spigot-1387]
	at net.minecraft.server.v1_7_R2.ThreadServerApplication.run(SourceFile:618) [spigot_1.7.9.jar:git-Spigot-1387]

Jak mogę to naprawić ? 

bez reklam

Opublikowano

Te błędy wynikają z tego, że jakiś plugin nie jest kompatybilny z pluginami na serwerze (SimplePluginManager) 

 

Albo nie masz zaktualizowanej Javy oraz jest coś nie tak z silnikiem spigot. 

Opublikowano

@Lord Asasin

Hmm nie wydaje mi się, aby jakiś plugin był niekompatybilny z innymi, dodam że mam spigota : This server is running CraftBukkit version git-Spigot-1387 (MC: 1.7.8) (Implementing API version 1.7.5-R0.1-SNAPSHOT)

 

oraz hosting na Pukawce. czyli wybrany spigot 1.7.5-1.7.10

 

Oraz może wiesz jak naprawić, aby były widoczne skuny na serwerze ? :) mam online-mode na true

bez reklam

Opublikowano

podpinaj pod MySQL to co jest ci potrzebne do uzywania z zewnątrz, np na stronie.

Lub to co autor pluginu zaleca by podpiąć (zakładając że się zna)

bo ładowanie wszystkiego w MySQL zwykle jednak nie ma sensu.

Dobry system plików będzie się sprawował lepiej. 

1438614356923701010629.png

 

Opublikowano

podpinaj pod MySQL to co jest ci potrzebne do uzywania z zewnątrz, np na stronie.

Lub to co autor pluginu zaleca by podpiąć (zakładając że się zna)

bo ładowanie wszystkiego w MySQL zwykle jednak nie ma sensu.

Dobry system plików będzie się sprawował lepiej. 

 

Zapis do pliku jest szybszy w przypadku małych ilości danych. Jednakże, gdy trzeba katalogować informacje o setkach czy tysiącach graczy to musisz użyć porządne bazy danych.

Opublikowano

Zapis do pliku jest szybszy w przypadku małych ilości danych. Jednakże, gdy trzeba katalogować informacje o setkach czy tysiącach graczy to musisz użyć porządne bazy danych.

nie musisz, 1 plik na gracza, albo nawet folder, nazwany jego UUID.

 

"porządnej bazy danych"

No to chyba nie MySQL :D tylko wtedy już PostgreSQL, nie no, do takich małych rzeczy jak MC, to MySQL się nada.

 

 

Powodzenia z zapisem do MySQL np całego EQ czy innych bardzo zaawansowanych i zróżnicowanych danych.

MySQL działa świetnie, tak długo jak dane są proste i schematyczne, inaczej traci to sens, bo jak zapiszesz całe EQ jako wielki fragment tekstu, to tracisz cały sens używania bazydanych.

 

Bazadanych ma być wtedy jak potrzebuje się by dane były dostępne w wielu miejscach jednocześnie, z możliwością wygodnego wyszukiwania danych, np wszystkich graczy co grają więcej niż 5 godzin na serwerze, pliki zrobią tutaj problem, a indexowana baza danych, poleci ładnie.

 

Ale dodawanie MySQL do każdego pluignu jako jedyne źródło zapisu... jest gimbusiarskie wręcz, "kolega mi pokazał MySQL, wygląda tak poważnie, profesjonalnie, tak fajnie, będę używał nawet jak tego nie rozumiem!"

 

A tak to spokojnie można pluginy typu essentials, uruchamiać nawet na milionach graczy używając plików.

1438614356923701010629.png

 

Opublikowano

nie musisz, 1 plik na gracza, albo nawet folder, nazwany jego UUID.

 

"porządnej bazy danych"

No to chyba nie MySQL :D tylko wtedy już PostgreSQL, nie no, do takich małych rzeczy jak MC, to MySQL się nada.

 

 

Powodzenia z zapisem do MySQL np całego EQ czy innych bardzo zaawansowanych i zróżnicowanych danych.

MySQL działa świetnie, tak długo jak dane są proste i schematyczne, inaczej traci to sens, bo jak zapiszesz całe EQ jako wielki fragment tekstu, to tracisz cały sens używania bazydanych.

 

Bazadanych ma być wtedy jak potrzebuje się by dane były dostępne w wielu miejscach jednocześnie, z możliwością wygodnego wyszukiwania danych, np wszystkich graczy co grają więcej niż 5 godzin na serwerze, pliki zrobią tutaj problem, a indexowana baza danych, poleci ładnie.

 

Ale dodawanie MySQL do każdego pluignu jako jedyne źródło zapisu... jest gimbusiarskie wręcz, "kolega mi pokazał MySQL, wygląda tak poważnie, profesjonalnie, tak fajnie, będę używał nawet jak tego nie rozumiem!"

 

A tak to spokojnie można pluginy typu essentials, uruchamiać nawet na milionach graczy używając plików.

 

W swojej wypowiedzi nie wiedzieć czemu założyłeś, że każe mu wszystko pakować do bazy. Stwierdziłem jedynie, że baza danych lepiej radzi sobie z duża ilością różnych danych. Na przykład przy pluginie na banowanie czy przy pluginie na gildie. Jeżeli chodzi o EQ graczy to można zapisać id itemu i jego meta z każdego pola w ekwipunku do osobnej kolumny w bazie. Dzięki temu możesz odczytywać i zmieniać itemy w poszczególnych polach bez potrzeby odczytywania i zapisu całego ekwipunku. Było by to przydatne do wyświetlania ekwipunków w panelu WWW czy dla itemshopu z obsługą graczy offline.

Opublikowano

W swojej wypowiedzi nie wiedzieć czemu założyłeś, że każe mu wszystko pakować do bazy. Stwierdziłem jedynie, że baza danych lepiej radzi sobie z duża ilością różnych danych. Na przykład przy pluginie na banowanie czy przy pluginie na gildie. Jeżeli chodzi o EQ graczy to można zapisać id itemu i jego meta z każdego pola w ekwipunku do osobnej kolumny w bazie. Dzięki temu możesz odczytywać i zmieniać itemy w poszczególnych polach bez potrzeby odczytywania i zapisu całego ekwipunku. Było by to przydatne do wyświetlania ekwipunków w panelu WWW czy dla itemshopu z obsługą graczy offline.

To nie takie proste, istnieją potki, fajerwerki, książki, dobry system zapisu itemków, wymagał by kilkudziesięciu bardzo sprytnie połączonych tabel.

I pobieranie z nich danych, było by masakrą :D

1438614356923701010629.png

 

Opublikowano

To nie takie proste, istnieją potki, fajerwerki, książki, dobry system zapisu itemków, wymagał by kilkudziesięciu bardzo sprytnie połączonych tabel.

I pobieranie z nich danych, było by masakrą :D

 

Stworzenie tej bazy i pobieranie danych przez stronę to nie taki problem. Najtrudniejsze wedle mnie było by stworzenie pluginu, który by synchronizował ekwipunki graczy z bazą bez przeciążania serwera. W sumie lepiej by to wpakować bezpośrednio do silnika niż jako plugin :) Niestety nie znam się na Javie na tyle by ocenić czy to nada się do praktycznych zastosowań.

Opublikowano

Stworzenie tej bazy i pobieranie danych przez stronę to nie taki problem. Najtrudniejsze wedle mnie było by stworzenie pluginu, który by synchronizował ekwipunki graczy z bazą bez przeciążania serwera. W sumie lepiej by to wpakować bezpośrednio do silnika niż jako plugin :) Niestety nie znam się na Javie na tyle by ocenić czy to nada się do praktycznych zastosowań.

Robione na szybko w 10 min, starając zachować się jak najwięcej zasad poprawnego tworzenia bazy :D

Players:                  ID_player|name|uuid|ID_inventory
InventoryType:            ID_inventoryType|Type
Inventory:                ID_inventory|Type|rows
Item:                     ID_item|ID_material|MetaID|Amount|position|ID_inventory|ItemName|ItemLore|ID_meta
Material:                 ID_material|Material|isBlock|isEdible|isRecord|isSolid|isTransparent|isFlammable|isBurnable|isOccluding|hasGravity|maxDurability|maxStack|metaDataTableName
BookMeta:                 ID_bookMeta|ID_item|Title|Author // lepiej nie dawać wszystkich stron, bo bazy danych często mają limity na 1 rekord
BookPage:                 ID_page|ID_book|pageNumber|page
EnchantmentStorageMeta:   ID_enchantmentStorageMeta|ID_item|ID_enchant|power
FireworkEffect:           ID_fireworkEffect|hasFlicker|hasTrail|ID_fireworkType
FireworkType:             ID_fireworkType|Type
FireworkColorWarp:        ID_fireworkEffect|position|ID_Color
FireworkFadeColorWarp:    ID_fireworkEffect|position|ID_Color
Color:                    ID_color|r|g|b
FireworkEffectMeta:       ID_fireworkEffectMeta|ID_item|ID_fireworkEffect
FireworkEffectWarp:       ID_fireworkEffect|ID_fireworkMeta // do przechowywaia efektów jakie posiada dana fajerwerka, podobnie jak FireworkColor
FireworkMeta:             ID_fireworkMeta|ID_item|power
LeatherArmorMeta:         ID_leatherArmorMeta|ID_item|ID_color
PotionEffectType:         ID_potionEffectType|Type
PotionEffect:             ID_potionEffect|ID_potionEffectType|time|power|isAmbient
PotionWarp:               ID_potionMeta|ID_potionEffect|position
PotionMeta:               ID_potionMeta|ID_item
RepairableMeta:           ID_repairableMeta|ID_item|hasCost|cost
SkullMeta:                ID_skullMeta|ID_item|owner
MapMeta:                  ID_mapMeta|ID_item|isScalable
Enchant:                  ID_enchant|Enchant
ItemEnchant:              ID_enchant|ID_item|power

powodzenia z używaniem :D

Pewnie da się ulepszyć, ale i tak wyjdzie tego masa, i będzie problemem by z tym zarządzać.

 

 

A synchronizacje EQ, da się zrobić plikami, lub nawet bez plików.

Wystarczy wysłać dane, bezpośrednio z servera na server.

Otwierając połączenie między nimi.

Szybciej, wygodniej, łatwiej :D

1438614356923701010629.png

 

Opublikowano

Robione na szybko w 10 min, starając zachować się jak najwięcej zasad poprawnego tworzenia bazy :D

Players:                  ID_player|name|uuid|ID_inventory
InventoryType:            ID_inventoryType|Type
Inventory:                ID_inventory|Type|rows
Item:                     ID_item|ID_material|MetaID|Amount|position|ID_inventory|ItemName|ItemLore|ID_meta
Material:                 ID_material|Material|isBlock|isEdible|isRecord|isSolid|isTransparent|isFlammable|isBurnable|isOccluding|hasGravity|maxDurability|maxStack|metaDataTableName
BookMeta:                 ID_bookMeta|ID_item|Title|Author // lepiej nie dawać wszystkich stron, bo bazy danych często mają limity na 1 rekord
BookPage:                 ID_page|ID_book|pageNumber|page
EnchantmentStorageMeta:   ID_enchantmentStorageMeta|ID_item|ID_enchant|power
FireworkEffect:           ID_fireworkEffect|hasFlicker|hasTrail|ID_fireworkType
FireworkType:             ID_fireworkType|Type
FireworkColorWarp:        ID_fireworkEffect|position|ID_Color
FireworkFadeColorWarp:    ID_fireworkEffect|position|ID_Color
Color:                    ID_color|r|g|b
FireworkEffectMeta:       ID_fireworkEffectMeta|ID_item|ID_fireworkEffect
FireworkEffectWarp:       ID_fireworkEffect|ID_fireworkMeta // do przechowywaia efektów jakie posiada dana fajerwerka, podobnie jak FireworkColor
FireworkMeta:             ID_fireworkMeta|ID_item|power
LeatherArmorMeta:         ID_leatherArmorMeta|ID_item|ID_color
PotionEffectType:         ID_potionEffectType|Type
PotionEffect:             ID_potionEffect|ID_potionEffectType|time|power|isAmbient
PotionWarp:               ID_potionMeta|ID_potionEffect|position
PotionMeta:               ID_potionMeta|ID_item
RepairableMeta:           ID_repairableMeta|ID_item|hasCost|cost
SkullMeta:                ID_skullMeta|ID_item|owner
MapMeta:                  ID_mapMeta|ID_item|isScalable
Enchant:                  ID_enchant|Enchant
ItemEnchant:              ID_enchant|ID_item|power

powodzenia z używaniem :D

Pewnie da się ulepszyć, ale i tak wyjdzie tego masa, i będzie problemem by z tym zarządzać.

 

 

A synchronizacje EQ, da się zrobić plikami, lub nawet bez plików.

Wystarczy wysłać dane, bezpośrednio z servera na server.

Otwierając połączenie między nimi.

Szybciej, wygodniej, łatwiej :D

 

Większość z podanych przez Cb wartości i tak będzie null, więc nie trzeba wszystkiego robić w osobnych kolumnach. A co do synchronizacji EQ przez połączenie, co gdy jeden serwer jest offline? 

Opublikowano

Większość z podanych przez Cb wartości i tak będzie null, więc nie trzeba wszystkiego robić w osobnych kolumnach. A co do synchronizacji EQ przez połączenie, co gdy jeden serwer jest offline? 

jak będzie null, nic nie będzie nullem, chyba że np nazwa książki jak jeszcze nie jest podpisana, a tak to nic nie jest potrzebne.

Nie trzeba, powinno się, takie są zasady relacyjnych baz danych i tak się robi. Chyba że przechowuje się całe EQ jako jakiś plik, ale wtedy tracisz ten argument co pisałeś wcześniej, że można edytować tylko fragmenty.

Nie wiem gdzie ty tam niby widzisz masę nulli. Nie każdy item musi być w każdej tabelce.

 

Skoro jest to synchronizacja, to gracz przelogowuje się z 1 na drugi, więc oba są online.

Jak się wylogowuje, można też zadbać by wszystko było wysyłane na lobby, i tam przechowywane, jak lobby padnie i tak będzie problem. :D

 

I druga sprawa, jak robimy to w sieci, to najczęściej jest to 1 maszyna, możesz nawet odczytać plik gracza bezpośrednio z innego serwera, czy sprytniejszym pluginem, zapisywać te EQ w jednym miejscu dla wszystkich serverów.

 

Jak nie są na localhoście... to dalej można udostępniać pliki :P

 

 

MySQL jest ok, ale nie można go wpierdzielać wszędzie na siłę.

MySQL przyda się wtedy jak chcemy robić wiele rzeczy na raz, wyszukiwać danych (dlatego wszystkie dane rozbija się na dużą ilość kolumn) po różnych parametrach, i takie tam.

1438614356923701010629.png

 

Opublikowano

jak będzie null, nic nie będzie nullem, chyba że np nazwa książki jak jeszcze nie jest podpisana, a tak to nic nie jest potrzebne.

Nie trzeba, powinno się, takie są zasady relacyjnych baz danych i tak się robi. Chyba że przechowuje się całe EQ jako jakiś plik, ale wtedy tracisz ten argument co pisałeś wcześniej, że można edytować tylko fragmenty.

Nie wiem gdzie ty tam niby widzisz masę nulli. Nie każdy item musi być w każdej tabelce.

 

Skoro jest to synchronizacja, to gracz przelogowuje się z 1 na drugi, więc oba są online.

Jak się wylogowuje, można też zadbać by wszystko było wysyłane na lobby, i tam przechowywane, jak lobby padnie i tak będzie problem. :D

 

I druga sprawa, jak robimy to w sieci, to najczęściej jest to 1 maszyna, możesz nawet odczytać plik gracza bezpośrednio z innego serwera, czy sprytniejszym pluginem, zapisywać te EQ w jednym miejscu dla wszystkich serverów.

 

Jak nie są na localhoście... to dalej można udostępniać pliki :P

 

 

MySQL jest ok, ale nie można go wpierdzielać wszędzie na siłę.

MySQL przyda się wtedy jak chcemy robić wiele rzeczy na raz, wyszukiwać danych (dlatego wszystkie dane rozbija się na dużą ilość kolumn) po różnych parametrach, i takie tam.

 

Nie o taką synchronizację chodziło, ale ok. Raczej o coś takiego gdzie serwery są na różnych maszynach, ale łączą się z jedną bazą danych EQ oraz o synchronizacje ze stroną WWW. Co do WWW i sklepów to nie trzeba Ci trzymać wszystkich wartości, bo nie wszystkie będą potrzebne, do tego można podzielić poszczególne typy itemów na relacyjne tabele (np. osobna dla mikstur, osobna dla fajerwerków, osobna dla książek, etc.), ale to już zależy od koncepcji autora sklepu. W każdym razie połowa tego co napisałeś to powtórzenie tego co pisałeś wcześniej. Ta dyskusja nie ma dalszego sensu, bo znając życie zaraz przerodzi się we flamewar :)

Opublikowano

Nie o taką synchronizację chodziło, ale ok. Raczej o coś takiego gdzie serwery są na różnych maszynach, ale łączą się z jedną bazą danych EQ oraz o synchronizacje ze stroną WWW. Co do WWW i sklepów to nie trzeba Ci trzymać wszystkich wartości, bo nie wszystkie będą potrzebne do można podzielić poszczególne typy itemów na relacyjne tabele (np. osobna dla mikstur, osobna dla fajerwerków, osobna dla książek, etc.), ale to już zależy od koncepcji autora sklepu. W każdym razie połowa tego co napisałeś to powtórzenie tego co pisałeś wcześniej. Ta dyskusja nie ma dalszego sensu, bo znając życie zaraz przerodzi się we flamewar :)

I potem szukasz po wszystkich tabelkach, gdzie znajduje się dany item? :D tak nie można.

 

I to co ja podawałem, to są właśnie relacyjne bazy danych, każdy typ itemku ma odpowiednie tabele które umożliwiają wykonanie wszystkich itemków, nie ważne czy to typowy potek z 1 efektem, czy jakiś porypany z 20, to co ty chcesz zrobić... to nie wiem co to będzie, u mnie nazywali to "błąd" lub "siadaj, pała" :D, a w gimbazujm wystarczyło umieć włączyć komputer ;<

 

I opisywałem o różnych maszynach, też można otworzyć połączenie, i będzie to nawet szybsze. Bo tak trzeba wysłać i zapisać w MySQL, a potem pobrać.

A nie daj boże nie zdąży się wszystko wrzucić z powodu przeciążenia/ściny i ktoś jebnie reloga miedzy serverami.

Więc MySQL złe nie jest, ale trzeba go używać z głową.

 

No nic, pozdrawiam o chyba czas zakończyć :D

Autor już musi sam zdecydować, czy potrzebuje MySQL, czy nie. Dostał 2 opinie :P

1438614356923701010629.png

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...