PDA

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


Andreas
16.08.2007, 19: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.

Bitti
14.01.2010, 18:41
Hi

Mal eine Frage.
Kann man das auch in den Widgets nutzen?
Wenn ja wie würde das dann aussehen?

Danke

Onur
17.01.2010, 11:23
das mit der config.php scheint bei vb4 aber nicht mehr zu klappen, oder?

Bitti
20.01.2010, 10:07
Noch jemand eine Idee wie man es in die Widgets einbinden kann, oder wie?

cellarius
20.01.2010, 10:37
Es spricht nichts dagegen, dass das in einem Custom PHP Widget nicht funktionieren sollte. Einfach mal ausprobiert? Und warum sollte das mit der config.php nicht mehr klappen? Die hat sich seit 3.8 nicht verändert, weder inhaltlich noch in ihrer Verwendung.

Bitti
20.01.2010, 22:28
Hast du vielleicht ein Beispiel für mich, wie es normalerweise funktionieren sollte?
Ich glaub ich steh grad auf dem Schlauch.

Bitti
21.01.2010, 21:35
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.
----------

Ich habe es jetzt mal so probiert, aber das Widget bleibt leer.

ragtek
21.01.2010, 21:49
Naja, $spezialtemplate hier zu setzen ist zu spät;)
Im Artikel steht dochFür vBulletin 3.6 kann man ein Plugin für Einstiegspunkt init_startup verwenden und dort einen Eintrag dem Array $datastore_fetch hinzufügen.
Das bedeutet das du ein eigenes Plugin dafür brauchst.

Bitti
21.01.2010, 21:52
Hi Ragtek

Und wie arbeite ich nach dem erstellen des Plugins weiter?
Um ein kleines Snippet wäre ich dankbar.

Danke

ragtek
21.01.2010, 22:02
Steht doch alles im Artikel?!

$datastore_fetch[] = "'eventcache'";

Bitti
21.01.2010, 22:04
Hi

Ich hab meinen Beitrag grad geändert.
Wie muß ich dann weiter vorgehen im Widget?

Danke

ragtek
21.01.2010, 22:07
Haben wir das nicht eh schon auf vbg.com gehabt?
Schau dir einfach mal die index.php /forum.php bei vB4 an

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.
----------

Bitti
21.01.2010, 22:09
Hi

Stimmt das hatte ich schon wieder vergessen.
Trotzdem Danke für deine Geduld.