Seite 1 von 1

Effizienz bei Benutzerdatenbank

Verfasst: Dienstag 17. Februar 2009, 23:48
von taenzer
Hallo zusammen,

Ich erstelle zur Zeit ein Forensystem für einen Kunden, der dies als interne Lösung verwendet. Als Basis verwende ich Zope 2.11.2 sowie das evtl. bekannte ZMS (www.zms-publishing.com) - das klappt auch bisher alles bestens und das ganze läuft im Grunde auch problemlos. Ging einfach schneller als ein bestehendes PHPBB umzufrickeln an die Anforderungen, die da gestellt wurden. Das ganze untertstützt die bekannten Forenfunktionen wie sie PHPBB auch bietet inkl. Benachrichtigungen, Dateianhängen und einer integrierten Verwaltung für Benutzer, Gruppen und Kategorien/Unterforen.

Da ich die ZOPE-eigene Benutzerverwaltung zwar zur Authentifizierung benutze, aber zusätzlich noch ein eigenes Objekt vom Typ Benutzer habe um weitere Metadaten zu speichern, frage ich derzeit die Benutzer in einem Python-Script innerhalb von ZOPE wie folgt ab:

Code: Alles auswählen

forum = context.forum_get_object()
user_db = forum.getObjChildren('users', REQUEST)

#Beispiel für eine Funktion, die überprüft, ob ein Benutzer existiert

def userexist():
	for x in user_db:
		if str(x.getObjProperty('username', REQUEST)) == str(REQUEST.get('username')):
			return True
		else:
			return False

Hintergrund: Die Benutzer werden via Python-Script als ZOPE-Benutzer angelegt, aber auch als Objekt innerhalb der Forum-Struktur. Diese liegen als sog. "Content-Objekt" vom selbstdefinierten Typ "Benutzer" innerhalb der Foren-"Ordnerstruktur".

Von Benutzer-Metaattributen innerhalb von ZOPE bzw. angepassten UserFolder habe ich Abstand genommen, da das ganze möglichst ohne Modifaktion am ZOPE-System laufen soll - sprich: Das ganze soll sich über die Paketverwaltung innerhalb des ZMS installieren lassen.

Das ist dadurch teilweise auf Programmierseite nicht sonderlich elegant, hat aber den Vorteil, dass ich die Benutzer als Objekte benutzen und damit auch über die ZMS-eigene API zugreifen kann.

Blöd gefragt: Wie würde ich eine solche Abfrage effizienter gestalten? Das Script muss ja im Grunde jedesmal alle Benutzer durchgehen - das kann bei vielen Daten nicht performant sein. Ein einfaches SELECT wie bei SQL gibt es ja hier nicht.

Würde mich über Ratschläge freuen - auch wie man das ganze vielleicht ingesamt sinnvoller gestalten kann.

Besten Dank,
Sebastian