Marauroa Database Structure: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
imported>Hendrik Brummermann |
imported>Kymara m →The whole picture: close brackets |
||
| (39 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
{{Navigation for Marauroa Top}} |
{{Navigation for Marauroa Top|Internals}} |
||
{{Navigation for Marauroa Developers}} |
{{Navigation for Marauroa Developers}} |
||
{{Database Access}} |
|||
__TOC__ |
|||
This article describes the table structure of the Marauroa database. You might want to have a look at [[High Level Database Access]] which explains the high level API to access the database from your program code. The article [[Low Level Database Access]] describes how Marauroa accesses the database internally and how you can add support for your own tables. |
This article describes the table structure of the Marauroa database. You might want to have a look at [[High Level Database Access]] which explains the high level API to access the database from your program code. The article [[Low Level Database Access]] describes how Marauroa accesses the database internally and how you can add support for your own tables. |
||
| Line 27: | Line 32: | ||
== RPObjects == |
== RPObjects == |
||
[[Image:Database-rpobjects.png]] |
[[Image:Database-rpobjects.png]] |
||
| ⚫ | |||
Player objects are linked to their account using the table characters. |
|||
Note: Currently the rpobjects (including owned slots and rpojbects in those slots) are serialized in a Blob field. In the Marauroa Version 1.x it was a relational. Unfortunately that approach was failing performance requirements (MySQL is extremely slow on delete statements). There is a [[Meta object model for relational data storage|concept]] in development that proposes an improved relational structure. |
|||
== Game Logging == |
== Game Logging == |
||
| Line 39: | Line 50: | ||
== The whole picture == |
== The whole picture == |
||
The following diagram shows the all tables used by Marauroa. Games are, however, free to add their own tables if the need arises (JMapacman and Marboard don't need additional tables but Stendhal makes heavy use of [[Stendhal Database Structure|this possibility]]. |
The following diagram shows the all tables used by Marauroa. Games are, however, free to add their own tables if the need arises (JMapacman and Marboard don't need additional tables but Stendhal makes heavy use of [[Stendhal Database Structure|this possibility]].) |
||
[[Image:Database-marauroa.png]] |
[[Image:Database-marauroa.png]] |
||
== Other stuff == |
|||
{{Move everything below these lines into the [[Database Access]] article}} |
|||
=== JDBC Database HOWTO=== |
|||
{{TODO|Update to reflect DAOs}} |
|||
{{TODO|Add H2}} |
|||
JDBC technology is an API that lets you access virtually any tabular data source from the Java programming language. It provides cross-DBMS connectivity to a wide range of relational databases. Unfortunatally it does not hide vendor specific stuff. Marauroa and Stendhal currently only work with MySQL because of that. Adding support for other database software would be very easy as the database specific code is concentrated in the classes JDBCDatabase (Marauroa) and StendhalPlayerDatabase (Stendhal). We have no need for that, so it was not done, yet. We will, however, accept patches for multi database system support, so if you need it, go ahead. |
|||
You need to download MySQL Connector/J in order to get it to run: http://www.mysql.com/downloads/api-jdbc-stable.html |
|||
To configure Marauroa to work with a JDBC source, run the appropriate GenerateINI program. For Stendhal this is games.stendhal.server.core.engine.GenerateINI. |
|||
Before using the application with the database, you need to create the database itself. So, with MySQL just run MySQL and enter: |
|||
<pre> |
|||
create database stendhal; |
|||
grant all on stendhal.* to stendhal_user@localhost identified by 'stendhal_passwd'; |
|||
</pre> |
|||
The rest of code is handled by the server itself, and it will create the tables if they don't exist. |
|||
=== Storing objects in the database === |
|||
Objects are stored in the database to save their state. This is an expensive operation, so it is only done every 10 minutes or on special events (like logout). |
|||
This decision is made in RPManager. It calculates how often an object has to be stored. |
|||
| ⚫ | |||
[[Category:Marauroa]] |
[[Category:Marauroa]] |
||
{{#breadcrumbs: [[Marauroa]] | [[Navigation for Marauroa Developers|Internals]] | [[Marauroa Database Structure|Database Structure]] }} |
|||