Seite 1 von 1
BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Samstag 26. März 2011, 00:38
von AllesMeins
Ich versuche mir gerade den Umgang mit Berkeley DB beizubringen und hatte auch schon einige kleinere Erfolge. Meine erste BTree-Datenbank steht, mein erstes Enviroment auch. Nun würde ich gerne mal mit dem Cursor-Objekt "rumspielen", nur muss ich gestehen, dass ich es schlicht und einfach nicht finde. Naiv wie ich bin, dachte ich, dass es sich genauso wie auch das Envireoment erzeugen lässt - also irgendwas wie:
Aber das schlägt fehl - 'module' object has no attribute 'DBCursor'. Das selbe gilt für DBTxn. Nun ist die dazugehörige Dokumentation ja auch eher arm an Beispielen und enthält (soweit ich das sehe) auch keinen Hinweis darauf, dass man diese Klassen irgendwo anders suchen muss. Könnt ihr mir also helfen, wie das geht?
Python: 2.6.5
bsddb3-Version: 4.8.3
Re: BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Samstag 26. März 2011, 02:41
von deets
Wie bei eigentlich jeder Datenbank holt man sich den Cursor ueber eine Verbindun - in deinem Fall wohl das Environment.
Die Doku ist da recht klar:
http://pybsddb.sourceforge.net/bsddb3.html
DB Methods
DB(dbEnv=None, flags=0)
Constructor. More info...
<snip/>
cursor(txn=None, flags=0)
Create a cursor on the DB and returns a DBCursor object. If a transaction is passed then the cursor can only be used within that transaction and you must be sure to close the cursor before commiting the transaction. More info...
Re: BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Samstag 26. März 2011, 02:44
von deets
Und natuerlich auch
txn_begin(parent=None, flags=0)
fuer die gesuchte Transaktion.
Re: BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Samstag 26. März 2011, 11:21
von AllesMeins
Danke für die Aufklärung. Da habe ich mich wohl von der Tatsache blenden lassen, dass man DBEnv direkt anlegen lassen bzw. davon das in der Doku bei den entsprechenden Klassen selber nichts dazu steht, wie sie erzeugt werden müssen.
Re: BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Samstag 26. März 2011, 11:45
von AllesMeins
Okay, ich schiebe gerade mal die nächste Frage nach. Weit bin ich nämlich leider nicht gekommen:
Ich stehe jetzt vor dem Problem, dass set_cachesize() nicht funktioniert. Immer wenn ich versuche das zu nutzen, gibt mir Python einen Segmentation Fault zurück:
Code: Alles auswählen
import bsddb3.db
env = bsddb3.db.DBEnv()
env.open('/tmp/', bsddb3.db.DB_CREATE)
env.set_cachesize(0, 512*1024*1024)
Nutze ich das falsch? Oder woran könnte das sonst liegen? Die Größe des gewünschten Caches habe ich schon variiert, ohne Erfolg...
Re: BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Samstag 26. März 2011, 13:27
von deets
Ich habe keine Ahnung von der Berkley-DB, aber die Doku von set_cachesize ist recht umfangreich:
http://pybsddb.sourceforge.net/api_c/db ... esize.html
Da steht unter anderem was von non-continuous und so krams.
Darf ich mal frage, warum du das ueberhaupt machen willst? Sowas ist doch ganz klar nen Tuning-Massnahme, und soweit ich das beurteilen kann, hast du noch nicht mal ein rollendes Dreirad
Insgesamt muss ich sagen finde ich die API furchteinfloessend.. vielleicht waere eine ander Datenbank besser geeignet? Was ist denn deine Anwendung?
Re: BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Samstag 26. März 2011, 13:34
von BlackJack
AllesMeins: Ich denke folgender Satz aus der Doku ist die Erklärung:
Re: BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Samstag 26. März 2011, 15:03
von noisefloor
Hallo,
vielleicht waere eine ander Datenbank besser geeignet?
Alternativen sind z.B. Redis und Tokyo Cabinet. Beide haben eine IMHO ziemlich klare API, für Redis gibt es auch einen ORM namens "Redisco" (wenn ich den Namen richtig im Kopf habe...).
Gruß, noisefloor
Re: BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Samstag 26. März 2011, 22:58
von AllesMeins
Danke für die Antworten... Leider ist set_cachesize() keine Tuning-Maßnahme. Zumindest soweit ich das verstehe. Wenn ich das nicht verwende, kann ich in einem Enviroment keine Datenbank öffnen, mit der Fehlermeldung das kein Memory-Pool festgelegt sei. Und was ich dazu gelesen habe, deutet daraufhin, dass ich ne cachesize angeben muss.
Re: BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Sonntag 27. März 2011, 13:56
von noisefloor
Hallo,
in Python 2.x gibt es doch das Module "bsddb". Mal abgesehen davon, dass es nicht für Python 3 übernommen wurde - die API ist ziemlich simple im Vergleich zu der hier genommenen Lösung... Oder wo ist der Unterschied?
Gruß, noisefloor
Re: BerkleyDB - wo verstecken sich DBTxn und DBCursor
Verfasst: Sonntag 27. März 2011, 22:32
von AllesMeins
Naja, der Unterschied ist halt, dass das alte rausfliegt. Und wenn ich mich jetzt da neu einarbeite, dann versuche ich schon das neue zu lernen.