I am not that familiar with the underline design of Db4Objects. (Where are the design docs?) I have used many databases over the last 25 years both hierarchial (Raima), relational (Oracle, Sybase, Postgre), B-Tree and ISAM (FairCom, Vermont) using Perl, C/C++, C#, Modula-3 and Haskell.
My Db4Objects needs will focus mainly on a few essential requirements:
Need to address memory as well as performance issues for small (00) medium (0000) and large (000000) collections. This will be an ongoing exercise in efficiency.
Need to allow user defined Predicate<T>, IComparer<T> and Enumerator definitions with multiple constraints and global external search strings (usually primary unique keys). These constraints may be included in many user defined overloaded methods. (ie: BinarySearch, Exits, FindAll, FindIndex, FindLast, FindLastIndex, GetEnumerator, Sort) Maybe this can be integrated with the ‘Query’ processor?
Need to allow user defined search and sort algorithms to be applied against specific persistent objects. Thus the user can control the memory chunks which acts as a constraint on memory resources. The purpose is to allow the user to design efficient iterators against specific persistent objects. (May be a need to externalize the handles) May also want to give consideration to concurrency, cooprocessing and partitioning. (ie: future design enhancements)
Need to align the set of persisted collection classes with the current transient collection sets which many developers are very familiar. Some of the persistent classes should be abstract to allow user inheritance.
Need to use ‘Event’ and ‘Exception’ handlers (callbacks) where possible to allow fine grain control of the ‘add’, ‘update’ and ‘removal’ process. May want to differentiate ‘dirty’ vs ‘destructive’ updates along with a test for using unique keys. Currently DB4Objects combines add and update functionality whereas using collections with unique keys requires separation.
My suggestion is try not to rush this difficult project! Upon each milestone, try to get as much user feed back as possible. Also, please publish the process otherwise it may wilt on the vine due to a lack of user participation. This takes time but will pay big dividents later on. I am sure that collisions and conflict will occur with the legacy artifact resulting in deprecation and outright abandonment of some prior code.
The idea of manufacturing ‘Fast Collections’ is very important but ‘Memory’ considerations are just as important. It’s a delicate balancing act!
“Lean manufacturing is the continuous process (kaizen) of reducing ‘muda’ (waste), ‘mura’ (unevenness of work load) and ‘muri’ (overburden of man and machine) in manufacturing operations to improve overall customer value by focusing on speed, flexibility and quality.” – food for thought.
I am willing to test each stage against my ongoing ‘Dependency Matrix’ tracking project which encapsulates millions of items with many large inter-related collections. (still in development)
Best of luck, John Sealey