Some bsddb changes

* allow to use bsddb3 as database via a config setting
  * set async write to disk to improve speed, eg import * 40


svn: r16446
This commit is contained in:
Benny Malengier 2011-01-23 21:25:51 +00:00
parent 551b70a8f3
commit b3beba53d8
18 changed files with 112 additions and 26 deletions

View File

@ -30,7 +30,6 @@
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
import os import os
import sys import sys
import bsddb
##import logging ##import logging
##_LOG = logging.getLogger(".GrampsAboutDialog") ##_LOG = logging.getLogger(".GrampsAboutDialog")
@ -54,6 +53,12 @@ import gtk
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
import const import const
from GrampsDisplay import url as display_url from GrampsDisplay import url as display_url
import config
if config.get('preferences.use-bsddb3'):
import bsddb3 as bsddb
else:
import bsddb
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -5,8 +5,13 @@ import gtk
import pygtk import pygtk
import gobject import gobject
import cairo import cairo
import sys, os,bsddb import sys, os
import config
if config.get('preferences.use-bsddb3'):
import bsddb3 as bsddb
else:
import bsddb
class ErrorReportAssistant(object): class ErrorReportAssistant(object):

View File

@ -108,6 +108,9 @@ class CLIDbManager(object):
Returns (people_count, version_number) of current DB. Returns (people_count, version_number) of current DB.
Returns ("Unknown", "Unknown") if invalid DB or other error. Returns ("Unknown", "Unknown") if invalid DB or other error.
""" """
if config.get('preferences.use-bsddb3'):
from bsddb3 import dbshelve, db
else:
from bsddb import dbshelve, db from bsddb import dbshelve, db
from gen.db import META, PERSON_TBL from gen.db import META, PERSON_TBL
env = db.DBEnv() env = db.DBEnv()

View File

@ -288,6 +288,7 @@ register('preferences.sprefix', 'S%04d')
register('preferences.use-last-view', True) register('preferences.use-last-view', True)
register('preferences.last-view', '') register('preferences.last-view', '')
register('preferences.last-views', []) register('preferences.last-views', [])
register('preferences.use-bsddb3', False)
register('researcher.researcher-addr', '') register('researcher.researcher-addr', '')
register('researcher.researcher-locality', '') register('researcher.researcher-locality', '')

View File

@ -188,6 +188,10 @@ class BSDDBTxn(object):
# test code # test code
if __name__ == "__main__": if __name__ == "__main__":
print "1" print "1"
import config
if config.get('preferences.use-bsddb3'):
from bsddb3 import db, dbshelve
else:
from bsddb import db, dbshelve from bsddb import db, dbshelve
print "2" print "2"
x = db.DBEnv() x = db.DBEnv()

View File

@ -24,6 +24,11 @@
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from cPickle import dumps, loads from cPickle import dumps, loads
import config
if config.get('preferences.use-bsddb3'):
from bsddb3 import db
else:
from bsddb import db from bsddb import db
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -63,6 +63,10 @@ DBLOCKS = 25000 # Maximum number of locks supported
DBOBJECTS = 25000 # Maximum number of simultaneously locked objects DBOBJECTS = 25000 # Maximum number of simultaneously locked objects
DBUNDO = 1000 # Maximum size of undo buffer DBUNDO = 1000 # Maximum size of undo buffer
import config
if config.get('preferences.use-bsddb3'):
from bsddb3.db import DB_CREATE, DB_AUTO_COMMIT, DB_DUP, DB_DUPSORT, DB_RDONLY
else:
from bsddb.db import DB_CREATE, DB_AUTO_COMMIT, DB_DUP, DB_DUPSORT, DB_RDONLY from bsddb.db import DB_CREATE, DB_AUTO_COMMIT, DB_DUP, DB_DUPSORT, DB_RDONLY
DBFLAGS_O = DB_CREATE | DB_AUTO_COMMIT # Default flags for database open DBFLAGS_O = DB_CREATE | DB_AUTO_COMMIT # Default flags for database open
DBFLAGS_R = DB_RDONLY # Flags to open a database read-only DBFLAGS_R = DB_RDONLY # Flags to open a database read-only

View File

@ -36,6 +36,11 @@ import random
import locale import locale
import os import os
from sys import maxint from sys import maxint
import config
if config.get('preferences.use-bsddb3'):
from bsddb3 import db
else:
from bsddb import db from bsddb import db
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _

View File

@ -32,8 +32,14 @@ database.
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from __future__ import with_statement from __future__ import with_statement
import cPickle as pickle import cPickle as pickle
import config
if config.get('preferences.use-bsddb3'):
from bsddb3 import dbshelve, db
else:
from bsddb import dbshelve, db from bsddb import dbshelve, db
import logging import logging
from collections import defaultdict from collections import defaultdict
#------------------------------------------------------------------------- #-------------------------------------------------------------------------

View File

@ -33,9 +33,14 @@ undos and redos.
from __future__ import with_statement from __future__ import with_statement
import time, os import time, os
import cPickle as pickle import cPickle as pickle
from collections import deque
import config
if config.get('preferences.use-bsddb3'):
from bsddb3 import db
else:
from bsddb import db from bsddb import db
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
from collections import deque
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -29,6 +29,10 @@ import time
""" """
methods to upgrade a database from version 13 to current version methods to upgrade a database from version 13 to current version
""" """
import config
if config.get('preferences.use-bsddb3'):
from bsddb3 import db
else:
from bsddb import db from bsddb import db
from gen.db import BSDDBTxn from gen.db import BSDDBTxn
from gen.lib.nameorigintype import NameOriginType from gen.lib.nameorigintype import NameOriginType

View File

@ -38,12 +38,16 @@ import time
import locale import locale
import bisect import bisect
from functools import wraps from functools import wraps
from gen.ggettext import gettext as _
from bsddb import dbshelve, db
import logging import logging
from sys import maxint from sys import maxint
from gen.ggettext import gettext as _
import config
if config.get('preferences.use-bsddb3'):
from bsddb3 import dbshelve, db
else:
from bsddb import dbshelve, db
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Gramps modules # Gramps modules
@ -413,6 +417,10 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
except: except:
pass pass
raise DbEnvironmentError(msg) raise DbEnvironmentError(msg)
# Set not to flush to disk synchronous
self.env.set_flags(db.DB_TXN_NOSYNC, 1)
self.env.set_flags(db.DB_TXN_WRITE_NOSYNC, 1)
self.env.txn_checkpoint() self.env.txn_checkpoint()
if callback: if callback:
@ -1636,8 +1644,8 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
self.undodb.clear() self.undodb.clear()
self.env.txn_checkpoint() self.env.txn_checkpoint()
if db.version() < (4, 7): #if db.version() < (4, 7):
self.env.set_flags(db.DB_TXN_NOSYNC, 1) # async txn # self.env.set_flags(db.DB_TXN_NOSYNC, 1) # async txn
if self.secondary_connected and not no_magic: if self.secondary_connected and not no_magic:
# Disconnect unneeded secondary indices # Disconnect unneeded secondary indices
@ -1676,8 +1684,8 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
""" """
if transaction.batch: if transaction.batch:
self.env.txn_checkpoint() self.env.txn_checkpoint()
if db.version() < (4, 7): #if db.version() < (4, 7):
self.env.set_flags(db.DB_TXN_NOSYNC, 0) # sync txn # self.env.set_flags(db.DB_TXN_NOSYNC, 0) # sync txn
if not transaction.no_magic: if not transaction.no_magic:
# create new secondary indices to replace the ones removed # create new secondary indices to replace the ones removed

View File

@ -21,6 +21,10 @@
# $Id$ # $Id$
import config
if config.get('preferences.use-bsddb3'):
import bsddb3 as bsddb
else:
import bsddb import bsddb
import types import types
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _

View File

@ -191,11 +191,18 @@ def show_settings():
except ImportError: except ImportError:
cairover_str = 'not found' cairover_str = 'not found'
import config
usebsddb3 = config.get('preferences.use-bsddb3')
try: try:
if usebsddb3:
import bsddb3 as bsddb
else:
import bsddb import bsddb
bsddb_str = bsddb.__version__ bsddb_str = bsddb.__version__
bsddb_db_str = str(bsddb.db.version())
except: except:
bsddb_str = 'not found' bsddb_str = 'not found'
bsddb_db_str = 'not found'
try: try:
import const import const
@ -243,6 +250,7 @@ def show_settings():
print ' pygtk : %s' % pygtkver_str print ' pygtk : %s' % pygtkver_str
print ' gobject : %s' % gobjectver_str print ' gobject : %s' % gobjectver_str
print ' bsddb : %s' % bsddb_str print ' bsddb : %s' % bsddb_str
print ' bsddb.db : %s' % bsddb_db_str
print ' cairo : %s' % cairover_str print ' cairo : %s' % cairover_str
print ' o.s. : %s' % operating_system print ' o.s. : %s' % operating_system
if kernel: if kernel:
@ -303,6 +311,10 @@ def run():
if argpars.need_gui(): if argpars.need_gui():
#A GUI is needed, set it up #A GUI is needed, set it up
if "--qml" in sys.argv:
from guiQML.grampsqml import startqml
startqml(error, argpars)
else:
from gui.grampsgui import startgtkloop from gui.grampsgui import startgtkloop
startgtkloop(error, argpars) startgtkloop(error, argpars)
else: else:

View File

@ -36,6 +36,11 @@ import tempfile
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
import cPickle as pickle import cPickle as pickle
import time import time
import config
if config.get('preferences.use-bsddb3'):
from bsddb3 import dbshelve, db
else:
from bsddb import dbshelve, db from bsddb import dbshelve, db
import logging import logging
LOG = logging.getLogger(".Db") LOG = logging.getLogger(".Db")

View File

@ -86,6 +86,8 @@ EVENT_PERSON_STR = _("%(event_name)s of %(person)s")
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
def importData(database, filename, callback=None, cl=0): def importData(database, filename, callback=None, cl=0):
## return Utils.profile(importDataPro, database, filename, callback, cl)
##def importDataPro(database, filename, callback=None, cl=0):
if DbMixin not in database.__class__.__bases__: if DbMixin not in database.__class__.__bases__:
database.__class__.__bases__ = (DbMixin,) + \ database.__class__.__bases__ = (DbMixin,) + \

View File

@ -36,6 +36,10 @@ import random
import locale import locale
import os import os
from sys import maxint from sys import maxint
import config
if config.get('preferences.use-bsddb3'):
from bsddb3 import db
else:
from bsddb import db from bsddb import db
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _

View File

@ -32,6 +32,10 @@ Show uncollected objects in a window.
# #
#------------------------------------------------------------------------ #------------------------------------------------------------------------
from gen.ggettext import gettext as _ from gen.ggettext import gettext as _
import config
if config.get('preferences.use-bsddb3'):
from bsddb3.db import DBError
else:
from bsddb.db import DBError from bsddb.db import DBError
#------------------------------------------------------------------------ #------------------------------------------------------------------------