PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Der Datastore enträtselt


Andreas
16.08.2007, 20:04
Was ist der Datastore?
Der Datastore ist ein bereits mit vBulletin 3.0 eingeführtes Konzept um den Zugriff auf sehr häfig benötigte, sich aber selten ändernde Daten zu beschleunigen. Häufig handelet es sich bei Datastore-Einträgen daher um Caches, wie beispielsweise Den Forumcache oder die Liste der Benutzer welche Heute Geburtstag haben.

Wie funktioniert das im Detail?
In vBulletin 3.0 war der Datastore lediglich als Tabelle (datastore) realisiert.
Einträge in dieser Tabelle werden über die Funktion build_datastore('schlüssel', 'daten') vorgenommen.
Um ein Array zu speichern, muss dieses serialisiert übergeben werden (Funktion serialize()).
vBulletin ab Version 3.6 kennt einen dritten Parameter unserialize. Ist dieser auf true gesetzt, so werden die Daten beim lesen automatisch unserialisiert.
Wichting: Der Schlüssel darf maximal 15 Zeichen lang sein!
Seit vBulletin 3.5 gibt es die Möglichkeit den datastore zz, z.B. per Memcache oder als Datei (im letzteren Fall werden nur ausgewählte, große Einträge dort gespeichert).
vBulletin 3.6 erlaubt zusätzlich die Nutzung von Shared Memory per eAccelerator oder APC.

Wie nutze ich das in meinem Script?
Jedes Script definiert ein Array $specialtemplates. Dieses gibt an, welche Einträge des datastore geladen werden.
Die geladenen Daten stehen als $vbulletin->schlüssel bereit.
Beispielsweise ließe sich der Datastore nutzen um einen Liste von Usern die scih momentan im Chat befinden zu cachen:

PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------Wie nutze ich das in Standard-Scripten/per Plugin?
Hier gibt es leider eine Schwierigkeit:
Plugins werden selbst aus dem datastore geladen, daher gibt es ohne Dateiänderungen keine Möglichkeit eigene Einträge gleich mitzuladen.
Es gibt 2 Ansätze die immer funktionieren
Eine zusätzliche Datenbankabfrage
Für vBulletin 3.6 kann man ein Plugin für Einstiegspunkt init_startup verwenden und dort einen Eintrag dem Array $datastore_fetch hinzufügen.
Alle Einträge dieses Arrays werden dann aus dem datastore geladen, es gibt also unabhängig davon wieviele eigene Einträge genutzt werden nur 1 zusätzliche Abfrage (=minimaler Overhead)
init_startup
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Dem jeweiligen PHP-Script den benötigten Eintrag im Array $specialtemplates hinzufügen
Hier bietet sich als Trick die Datei config.php an.
Diese wird bei einem Update nicht überschrieben, die Änderung ist also nur 1 einziges mal nötig.
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
Falls datastore-Caches verwendet werden gibt es noch weitere Möglichkeiten - diese sind jedoch nicht allgemein verwendbar weshalb ich mir Erläuterungen hierzu erspare.