durusmail: durus-users: Durus: my experience and trouble
Durus: my experience and trouble
2005-10-25
2005-10-25
2005-10-25
2005-10-25
2005-10-25
Durus: my experience and trouble [SOLVED]
2005-10-26
Durus: my experience and trouble
Kai Schmidt
2005-10-25
Hi,

i am in the transition to use Durus more often as my favourit database and
would also like to switch from relational to object-oriented. Programing
language is Python (2.4.1), i have Durus 3.1 installed from source on my
Kubuntu breezy Linux system. (There seems to be no ubuntu|deb-package
available!)

I was not able to find code samples (simple and not so simple) via Google or
even reading in this mailing-list.

To make a longer story short: I have troubles with (my) Durus in my somewhat
larger programs. I see "memory allocation errors" very often, so that atm
durus is not usable for me. It just dies, no messages to follow :=(

Little testing programs do work though, i have pasted one into this email
(hope thats the correct way, the python-format will most likely not survive).

I'm hoping that :

1. someone could tell me if thats the way to work with OODBs|Durus, or give
some hints how to do better? Im especially interessted in bringing some form
of hierarchy|separation into Durus.

2. that this will help others to get started (especially when the code is
good)

3. I will find out something to use Durus in my bigger programs. [BTW those
progs are a bit bigger, but the demand for Durus is imho rather small]

Thanks in advance and waiting to here from you

Kai

The rest is my (working) demo program:



#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
    This is a test to bring a hierarchy into durus-ODB. To separate a part
    'Products' from some other part 'Bookings'.
    100 persistent dictionaries are stored in the persistent_dict 'Products'
    100 persistent dictionaries are stored in the persistent_dict 'Bookings'

    1. Start Durus-Server before running that:
            durus -s --file newfile.durus
    2. Run this program with option -init
    3. Stop the Durus-server, and restart
            durus -s --stop
            durus -s --file newfile.durus
    4. Run this program with option -read
"""

import sys
import random
import socket
from durus.client_storage import ClientStorage
from durus.connection import Connection
from durus.persistent import Persistent
from durus.persistent_dict import PersistentDict
from durus.persistent_list import PersistentList
from durus.error import ProtocolError




SIZE=100

def rand(limit=100):
    return random.randint(1,limit)


if len(sys.argv)>1: arg = sys.argv[1]
else:               arg = "-init"

print "arg=", arg

try:
    connection = Connection(ClientStorage())
except socket.error:
    print "Durus-Server is not running. Start 'durus -s --file
newfile.durus' !"
    sys.exit(2)

root=connection.get_root()
connection.commit()             # ??


if arg=="-init":            # use this for the first time
    print "Filling the empty ODB"

    root['Products']=PersistentDict()         # ??
    root['Bookings']=PersistentDict()
    connection.commit()                       # ??

    ProdDB=root['Products']      # a Shortcut
    BookDB=root['Bookings']      # a Shortcut

    for i in range(SIZE):
        normalDict={'aInt'   : rand(),
                    'aFloat' : 2.22,                        # simple Float, no
persistance needed
                    'aString': 'DurusProducts',             # simple String,
no persistance needed
                    'aTuple' : (rand(5),rand(5),rand(5))    # simple tuple, no
persistance needed
                    }

        keyID="key%i" % i
        ProdDB[keyID]=PersistentDict(normalDict)
        connection.commit()

    print "Stored %i Dictionaries in part ProdDB" % SIZE
    print "retrieving the one named 'key7'"

    k7=ProdDB['key7']
    print type(k7), k7.keys()
    print k7['aInt'], k7['aTuple']

    for i in range(SIZE):       # same again for Bookings
        normalDict={'aInt'   : rand(),
                    'aFloat' : 2.22,
                    'aString': 'DurusBookings',
                    'aTuple' : (rand(5),rand(5),rand(5)) }

        keyID="key%i" % i
        BookDB[keyID]=PersistentDict(normalDict)
        connection.commit()

    print "Stored %i Dictionaries in part BookDB" % SIZE
    print "retrieving the one named 'key7'"

    k7=BookDB['key7']
    print type(k7), k7.keys()
    print k7['aInt'], k7['aTuple']




if arg=="-read":        # use after the first time
    print "Reading from the filled ODB"

    if not root.has_key('Products'):
        print "no Dictionary 'Products' found !!"
        sys.exit(1)

    ProdDB=root['Products']      # a Shortcut
    BookDB=root['Bookings']      # a Shortcut

    for prod in ProdDB:
        p=ProdDB[prod]
        print prod, p['aInt'], p['aFloat'], p['aString'], p['aTuple']

    print 50* "="

    for book in BookDB:
        p=BookDB[book]
        print book, p['aInt'], p['aFloat'], p['aString'], p['aTuple']

    print 50*"="
    print "%i Entries in ProdDB" % len(ProdDB)
    print "%i Entries in BookDB" % len(BookDB)


reply